Есть ли способ переименовать все файлы в каталоге в нижний регистр | в верхний регистр?
Ищу команду oneliner .
Мне понравился TotalCommander's alt+f7
, теперь мне нужна эта функциональность в терминале
Для каждого файла a_file
в текущем каталоге переименуйте a_file
в нижний регистр.
for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;
Для заглавных букв переведите аргументы в [:lower:] [:upper:]
tr
справочник команд ссылка
Обновление
Для еще большего контроля *
можно заменить на ls
.
Например, в каталоге, содержащем 1.txt, 2.txt, 3.txt, 1.jpg, 2.jpg и 3.jpg для фильтрации только файлов * .jpg, ls
может быть used:
for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;
Приведенный выше код назначит переменной a_file
все файлы с расширением .jpg.
Обновление добавило опцию -v
в команду mv
в соответствии с sds .
Существует более изящная и общая названная утилита prename
.
Записанный Larry Wall, это идет perl
таким образом, это уже наиболее вероятно доступное в Вашей системе как /usr/bin/prename
(если у Вас есть альтернативы установки, может также быть доступным как /usr/bin/rename
symlinked через/etc/alternatives к prename
)
Используя его можно переименовать несколько файлов в одной команде путем обеспечения любого выражения жемчуга (включая, но не ограничиваясь, заменой s///
или символьная транслитерация tr///
):
Примеры:
# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG
# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*
# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*
# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}' *
И так далее.
Другая хорошая вещь о предварительном имени состоит в том, что оно защищает Вас, в случае переименования файла к существующему имени файла.
man prename
для получения дополнительной информации.
find
find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find
-name
поместите свой паттерн. -maxdepth 0
: только текущий каталог. rename
-n, -nono
: никаких действий: печатать имена файлов, которые нужно переименовать, но не переименовывать. y/source/dest/
: Транслитерировать символы в пространстве образца, которые появляются в источнике, в соответствующий символ в dest. Использование mmv
для преобразования совпадающей строки в верхний регистр:
$ mmv -r '*' '#u1'
Важно заключить шаблон в кавычки, иначе вместо этого будет расширен подстановочный знак.