Чи є спосіб перейменувати всі файли в каталозі на малі | великі регістри?
Я шукаю команду 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 / alternative 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
для отримання детальної інформації.
find
find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find
-name
нанесіть свій візерунок.-maxdepth 0
: Тільки поточний каталог.rename
-n, -nono
: Немає дій: друкуйте імена файлів, які слід перейменовувати, але не перейменуйте.y/source/dest/
: Транслітерація символів у просторі шаблонів, які з’являються у джерелі, до відповідного символу у dest.
mv
так, щоб побачити, що робиться; ви, можливо, не захочете пропустити "-f", оскільки це може прикути існуючі файли