Como posso renomear imagens com o comando 'renomear' de "something_full.jpg" para "something_500.jpg" recursivo?
Responder1
Basicamente, você pode usar a rename
ferramenta para isso. Deve vir em uma versão baseada em Perl com distribuições Linux baseadas em Debian, mas você pode facilmentebaixeda fonte também (obviamente, você precisa torná-lo executável primeiro com chmod +x
).
O comando a seguir substituirá a _full
parte em _500
todos os arquivos JPG no diretório atual.
rename 's/_full/_500/' *.jpg
Para fazer isso recursivamente, começando no diretório atual, use rename
with find
.
find . -type f -iname "*.jpg" -exec rename 's/_full/_500/' {} \;
Observação:Você pode querer testar o comando antes de realmente executá-lo. Para fazer isso, adicione a -n
opção rename
(por exemplo, entre rename
e a 's//'
string).
Responder2
Você pode querer investigarzmv. zmv é um recurso específico do zsh e precisa autoload -U zmv
estar em algum lugar do seu .zshrc
arquivo.
EDITAR: Por exemplo, a tarefa proposta pelo OP poderia ser resolvida com
noglob zmv '(*)_full.(*)' '$1_500.$2'
Um trecho da zshcontrib
página de manual:
zmv [ -finqQsvwW ] [ -C | -L | -M | -p program ] [ -o optstring ] srcpat dest
Mova (geralmente, renomeie) arquivos que correspondam ao padrão srcpat para arquivos correspondentes com nomes no formato dado por dest, onde srcpat contém parênteses em torno de padrões que serão substituídos por $1, $2, ... em dest. Por exemplo,
zmv '(*).lis' '$1.txt'
renomeia
foo.lis
parafoo.txt
,my.old.stuff.lis
paramy.old.stuff.txt
e assim por diante.O padrão é sempre tratado como um padrão EXTENDED_GLOB. Qualquer arquivo cujo nome não seja alterado pela substituição é simplesmente ignorado. Qualquer erro (uma substituição resultou em uma string vazia, duas substituições deram o mesmo resultado, o destino era um arquivo regular existente e -f não foi fornecido) faz com que toda a função seja abortada sem fazer nada.
Os padrões EXTENDED_GLOB são tremendamente poderosos.Aquié uma boa introdução ao conceito.