O que faz o comando “rename * * .log *”?

0

Estou executando o Red Hat 7.3.

Eu digitei rename * *.log * com a esperança de remover log dos nomes de todos os arquivos.

Eu não estou fazendo isso e, em suma, acho que de alguma forma os arquivos estão desaparecendo.

    
por Stuart Wilson 21.12.2017 / 05:11

1 resposta

2

Depende de qual programa rename está no seu sistema (não me lembro do RHEL). Se for a renomeação do util-linux , você provavelmente renomeou seu primeiro arquivo durante o segundo . Veja o que acontece. (Eu vou usar rename.ul para maior clareza aqui.)

Com os três arquivos a.log , b.log e c.log , se dermos o comando rename.ul * *.log * , o shell expandirá os globs e o comando final executado será:

rename.ul a.log b.log c.log a.log b.log c.log a.log b.log c.log

Agora, rename considera os dois primeiros como um padrão e um substituto e os aplica aos arquivos nomeados pelo restante dos argumentos. Então, basicamente o comando diz para substituir a.log por b.log nos nomes de qualquer c.log a.log b.log c.log a.log b.log c.log . Apenas a.log corresponde e foi movido para b.log , e você provavelmente recebe uma mensagem de erro para o próximo a.log listado.

Se o seu rename foi o Perl renomear ( prename ) , você provavelmente teria recebido um erro sem que nada acontecesse, já que seu primeiro nome de arquivo provavelmente não é um comando Perl válido. prename também não sobrescreve arquivos por padrão.

Com a renomeação de util-linux, para remover .log dos nomes dos arquivos, você usaria

$ rename.ul .log "" *.log

Isso também alteraria qualquer correspondência do meio do nome, então v.logger se transformaria em vger .

Com a renomeação Perl, o comando seria

$ prename 's/\.log$//' *.log
    
por 21.12.2017 / 07:30

Tags