Есть ли способ переименовать все файлы в каталоге в нижний регистр | верхний регистр?
Я ищу команду oneliner .
Я любил TotalCommander's alt+f7, теперь мне нужна эта функциональность в терминале
Есть ли способ переименовать все файлы в каталоге в нижний регистр | верхний регистр?
Я ищу команду 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можно использовать:
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.
Написанный Ларри Уоллом, он поставляется вместе с ним, perlтак что, скорее всего, он уже доступен в вашей системе, поскольку /usr/bin/prename(если у вас есть альтернативы настройки, он также может быть доступен в виде /usr/bin/renameсимволической ссылки через / etc / alternatives prename)
Используя его, вы можете переименовать несколько файлов в одной команде, предоставив любое выражение perl (включая, но не ограничиваясь, подстановку 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"}' *
И так далее.
Еще одна приятная вещь в prename - это то, что она защищает вас в случае переименования файла в существующее имя файла.
man prename Больше подробностей.
findfind . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find-nameпоставить свой шаблон.-maxdepth 0: Только текущий каталог.rename-n, -nono: Никаких действий: печатать имена файлов, которые нужно переименовать, но не переименовывать.y/source/dest/: Транслитерация символов в пространстве образца, которые появляются в источнике, в соответствующий символ в dest.
mvчтобы увидеть, что делается; Возможно, вы не захотите передавать «-f», потому что это может привести к сбою существующих файлов