Как я могу переименовать изображения с помощью команды "переименовать" из «нечто_full.jpg» в «что-то_500.jpg» рекурсивный?
2 ответа
По сути, вы можете использовать инструмент rename
для этого. Он должен быть в версии для Perl с дистрибутивами Linux на основе Debian, но вы также можете легко загрузить его из исходного кода (очевидно, вы должны сначала сделать его исполняемым с помощью chmod +x
).
Следующая команда заменит _full
части с _500
на все файлы JPG в текущем каталоге.
rename 's/_full/_500/' *.jpg
Чтобы сделать это рекурсивно, начиная с текущего каталога, используйте rename
с помощью find
.
find . -type f -iname "*.jpg" -exec rename 's/_full/_500/' {} \;
Примечание. Возможно, вы захотите проверить команду перед ее выполнением. Чтобы сделать это, добавьте опцию -n
для rename
(например, между rename
и строкой 's//'
).
Вы можете посмотреть в ZMV. zmv - это особенность zsh, для которой требуется, чтобы autoload -U zmv
находилась где-то в вашем файле .zshrc
.
РЕДАКТИРОВАТЬ: В качестве примера, задача, поставленная ОП может быть решена с
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 чрезвычайно мощные. Вот хороший учебник по концепции.