Как переименовать изображения с помощью команды «rename» из «something_full.jpg» в «something_500.jpg» рекурсивно?
решение1
В принципе, вы можете использовать этот rename
инструмент для этого. Он должен быть в версии на основе Perl с дистрибутивами Linux на основе Debian, но вы можете легкозагрузитьтакже из исходного кода (очевидно, сначала его нужно сделать исполняемым с помощью chmod +x
).
Следующая команда заменит _full
часть _500
во всех файлах JPG в текущем каталоге.
rename 's/_full/_500/' *.jpg
Чтобы сделать это рекурсивно, начиная с текущего каталога, используйте rename
with find
.
find . -type f -iname "*.jpg" -exec rename 's/_full/_500/' {} \;
Примечание:Вы можете захотеть протестировать команду перед ее фактическим выполнением. Чтобы сделать это, добавьте опцию -n
( rename
например, между rename
и 's//'
строкой).
решение2
Возможно, вам стоит рассмотретьзмв. zmv — это специфическая функция zsh, которая должна autoload -U zmv
находиться где-то в вашем .zshrc
файле.
EDIT: Например, задача, поставленная автором, может быть решена с помощью
noglob zmv '(*)_full.(*)' '$1_500.$2'
Отрывок из zshcontrib
страницы руководства:
zmv [ -finqQsvwW ] [ -C | -L | -M | -p program ] [ -o optstring ] srcpat dest
Переместить (обычно переименовать) файлы, соответствующие шаблону srcpat, в соответствующие файлы с именами в форме, заданной dest, где srcpat содержит скобки, окружающие шаблоны, которые будут по очереди заменены на $1, $2, ... в dest. Например,
zmv '(*).lis' '$1.txt'
переименовывает
foo.lis
вfoo.txt
,my.old.stuff.lis
вmy.old.stuff.txt
и т. д.Шаблон всегда обрабатывается как шаблон EXTENDED_GLOB. Любой файл, имя которого не изменено подстановкой, просто игнорируется. Любая ошибка (подстановка привела к пустой строке, две подстановки дали одинаковый результат, пункт назначения был существующим обычным файлом и -f не был указан) приводит к прерыванию всей функции без выполнения каких-либо действий.
Шаблоны EXTENDED_GLOB чрезвычайно эффективны.Здесьявляется хорошим введением в концепцию.