У меня есть много файлов в папке, и я хочу добавить к ним префикс или суффикс (не оба ). Я проверил здесь и узнал, что я могу использовать
for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;
добавить префикс ко всем файлам, оканчивающимся на .jpg
(и если я удалю .jpg
, он добавит префикс ко всем файлам в текущей папке).
Тем не менее, я хотел бы иметь возможность
- Добавить суффикс (то есть переименовать
filename.ext
вfilename.whatever.ext
), - Проверьте, если префикс или суффикс уже присутствует, а затем пропустите,
- Создайте псевдоним, который принимает аргументы, такие как
addprefix whatever *.ext
илиaddsufix whatever *.*
shell
shell-script
rename
Этот бразильский парень
источник
источник
if [ $f == $prefix* ]
и вы можете изменить суффикс сif [ $f == *$suffix$([ ! -z $extension ] && echo -n '.')$extension ]
парой команд mv в adduffix. Для (2) он уже должен работать с файлами без расширения, если я не ужасный программист.Есть команда Perl,
rename
которая должна сработать. Однако будьте осторожны: вызывается несколько разных командrename
, поэтому убедитесь, что у вас есть скрипт Perl, который ожидает вperlexpr
качестве аргумента a . Этоrename
команда, предоставляемаяperl
пакетом для Debian и производных (Ubuntu, Mint,…), но не для других дистрибутивов, которые могут иметь другую утилитуrename
.Как видите, он идемпотентен - он не будет добавлять префикс снова, когда вы вызываете его несколько раз.
Он работает либо заменой начала (нулевой длины) строк (
^
), либо начала, за которым следует необязательнаяprefix
строка сprefix
.Я оставлю инкапсуляцию этого в сценарии оболочки или функции оболочки в качестве упражнения для вас :)
Postfix немного сложнее, потому что вы должны выяснить, какая часть имени файла представляет собой расширение ...
источник
rename
. И я знаю, что суффиксы немного сложнее, они не были затронуты в связанном вопросе, и я новичок в Linux, Bash, сценариях оболочки, Perl и регулярных выражениях, так что «немного сложнее» довольно сложно для меня ! :)С
zsh
:~
является оператором смещения, что означает, кроме как вzsh
.источник
Простой пример изменения префикса и расширения всех изображений в текущей папке.
Если вы хотите проверить, как это повлияет на ваши данные, прежде чем менять их, замените mv на echo.
вывод для IMG_7993.JPG - EG_IMG_7993.jpg
источник