Problema com “renomear” usando regex (Linux)

1

Eu tenho um script de backup que cria dois arquivos:

a ) db_mywebsite_2018-01-10_00-25.sql.gz (150 MB)

b ) mywebsite1_2018-01-10_00-01.tar.gz (2 GB)

Eu quero remover a data (XXXX-XX-XX_XX-XX) dos nomes dos arquivos. Como o backup é feito diariamente, cada arquivo terá uma data diferente no nome. Para isso, estou usando o seguinte comando:

rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz

Para testes, eu tenho touch ed dois arquivos db_mywebsite_2018-01-10_00-25.sql.gz e mywebsite1_2018-01-10_00-01.tar.gz

Comando :

rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz

Saída :

db_mywebsite_2018-01-10_00-25.sql.gz renamed as db_mywebsite.sql.gz

1 . O problema é que, apesar da mensagem acima "db_mywebsite_2018-01-10_00-25.sql.gz ser renomeada como db_mywebsite.sql.gz" quando eu a veri via ls -l , parece que o nome do arquivo não foi renomeado.

2 . O comando Rename (regex) não está funcionando no arquivo mywebsite1_2018-01-10_00-01.tar.gz .

    
por Martin Smith 11.01.2018 / 01:49

1 resposta

4
  1. Para a versão perl de rename , a opção -n significa nenhuma ação: imprima nomes de arquivos a serem renomeados, mas não renomeie. Se você deseja que o arquivo seja renomeado , não use a opção -n . Assim, em vez de:

    rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz
    

    Uso:

    rename -v 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz
    
  2. Considere:

    rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz
    

    O comando acima tentará apenas renomear arquivos terminados em .sql.gz . Ele não irá renomear mywebsite1_2018-01-10_00-01.tar.gz porque esse arquivo termina com .tar.gz . Para renomear os dois arquivos, tente:

    rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.tar.gz *.sql.gz
    
por 11.01.2018 / 02:06