У меня есть, например, TREE.wav, ONE.WAV. Я хочу переименовать его в tree.wav, one.wav. Как переименовать все файлы в нижний регистр?
Как переименовать все файлы в нижний регистр?
Ответ 1
Если вам удобно работать с терминалом:
- Откройте Terminal.app, введите
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 для нескольких исправлений и благодаря Джону Уитли ниже, чтобы сделать это более безопасным для файловых систем без регистра.)
Ответ 2
Заданный вопрос является общим и также важным, поэтому я хотел бы дать более общий ответ:
Простейший случай (в большинстве случаев безопасный и в 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
Ответ 3
Как удалить "_" в имени файла и заменить его пробелом? Я хотел бы включить это в мою существующую строку редактирования, которая прекрасно работает.
для f в *; do mv "$ f" "$ f.tmp"; mv "$ f.tmp" " echo $f | tr "[:lower:]" "[:upper:]"
"; сделанный