У мене є, наприклад, TREE.wav, ONE.WAV. Я хочу перейменувати його на tree.wav, one.wav. Як перейменувати всі файли в малі регістри?
У мене є, наприклад, TREE.wav, ONE.WAV. Я хочу перейменувати його на tree.wav, one.wav. Як перейменувати всі файли в малі регістри?
Відповіді:
Якщо вам зручно з терміналом:
cd
а потім перетягніть папку, що містить файли, які потрібно перейменувати у вікно.ls
та натисніть клавішу Enter.Вставте цей код і натисніть Enter:
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
ls
і знову натисніть клавішу Enter.(Дякуємо @bavarious на Twitter за кілька виправлень, а також дякую Джону Вітлі нижче за те, що він зробив більш безпечним для файлових систем, що не залежать від регістрів.)
foo.txt
і FOO.TXT
це може затирати один з них.
mv "$f" "${f,,}"
абоdeclare -l g=$f; mv "$f" "$g"
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
Задане запитання є загальним, а також важливим, тому я хочу надати більш загальну відповідь:
Найпростіший випадок (безпечний більшу частину часу і на Mac OS X, але читайте далі):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Вам також потрібно обробити пробіли у назви файлів (будь-яка ОС):
IFS=$'\n' ; for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Вам потрібно безпечно обробляти назви файлів, які відрізняються лише залежно від регістру у файловій системі, що відрізняється від регістру, і не перезаписувати ціль (наприклад, Linux):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done
Примітка про Mac OS X:
Файлова система Mac нечутлива до регістру і зберігає регістр.
Однак немає необхідності створювати тимчасові файли, як це пропонується у прийнятій відповіді та коментарях, оскільки дві назви файлів, які відрізняються лише у кожному випадку, не можуть існувати в першу чергу, див .
Щоб показати це:
$ mkdir test
$ cd test
$ touch X x
$ ls -l
total 0
-rw-r--r-- 1 alexharvey wheel 0 26 Sep 20:20 X
$ mv X x
$ ls -l
total 0
-rw-r--r-- 1 alexharvey wheel 0 26 Sep 20:20 x