mmv é bom para tarefas como esta ex.
mmv -n -- '*.ext' '#1-bar.ext'
ou para qualquer extensão de ponto
mmv -n -- '*.*' '#1-bar.#2'
Remova o -n quando estiver satisfeito por estar fazendo a coisa certa.
Eu tenho muitos arquivos como xyz_123_foo.ext para os quais gostaria de adicionar -bar aos nomes dos arquivos no final para resultar em xyz_123_foo-bar.ext . Eu tentei:
rename . -bar. xyz_*
que resultou em:
rename: invalid option -- 'b'
seguido pelo texto de uso. Eu tentei variações com '-bar' e "-bar" sem sucesso.
Como posso obter rename para aceitar - como parte da string de substituição?
Ou outro comando seria mais eficiente ou apropriado?
Meu shell é bash e estou usando o rename de util-linux no SuSe Linux SLE12.
Assumindo que seu rename é a variante Perl do utilitário rename :
rename 's/$/-bak/' xyz_*
Isso usa uma expressão Perl que simplesmente insere -bak no final de todos os nomes de arquivos fornecidos por meio de uma substituição de $ (a âncora "fim de linha").
Você também pode usar
rename '$_ .= "-bak"' xyz_*
que usa outra expressão Perl que acrescenta a string -bak a $_ (a "coisa atual" em Perl, aqui está um nome de arquivo).
Para uma solução de loop de shell:
for name in xyz_*; do
mv -i "$name" "$name-bak"
done
Supondo que estamos falando sobre a extensão PERL, rename (e não o rename de util-linux ) ...
rename 's/.ext/-bar.ext/' xyz_123_foo.ext
O resultado altera o nome do arquivo para xyz_123_foo-bar.ext .
A parte entre aspas simples é uma expressão regular PERL. O s substitui .ext no nome do arquivo por -bar.ext . Pode-se combinar isso com find , supondo que esses arquivos estejam em seu diretório pessoal ( ~ ).
find ~ -type f -name '*.ext' -exec rename 's/.ext/-bar.ext/' {} +