У меня например 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 в твиттере за несколько исправлений и спасибо Джону Уитли ниже за то, что сделал это более безопасным для файловых систем без учета регистра.)
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 не чувствительна к регистру и сохраняет регистр.
Однако нет необходимости создавать временные файлы, как это предлагается в принятом ответе и комментариях, потому что два имени файла, которые различаются только регистром, не могут существовать в первую очередь, ref .
Чтобы показать это:
$ 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