'renomear' com expressão | substituição por um início '-' (hífen | menos)

2

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.

    
por astzge2 28.11.2018 / 15:23

3 respostas

4

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.

    
por 28.11.2018 / 15:43
3

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
    
por 28.11.2018 / 15:31
1

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/' {} +
    
por 28.11.2018 / 17:00