Renomeia os arquivos, mas retém os registros originais de data e hora no nome

1

Eu tenho uma lista de algumas centenas de arquivos. Eles estão atualmente como abaixo:

filename.New_20160901.dat
filename.New_20160902.dat
...

, etc., até

filename.New_<current date>.dat

Eu tenho um processo que atualmente busca pegar arquivos de um diretório de destino, mas em um formato de nome de arquivo totalmente diferente.

O que eu quero fazer é renomear os arquivos, mas manter a data. Por exemplo, se eu fosse alterar um arquivo, seria como:

$ mv filename.New_20160902.dat FILE_NAME_NEW.20160902.dat

Facilmente feito para um arquivo, mas como posso fazer isso para uma lista de arquivos. Eu quero extrair a parte da data do nome do arquivo antigo, armazená-lo como uma variável e mv desse arquivo antigo para um novo arquivo com o novo nome de arquivo, mantendo a parte da data o mesmo.

Obrigado

    
por J.Lo 02.02.2018 / 09:33

3 respostas

1

tente

rename -n s/filename.New_/FILE_NAME_NEW./ filename.New*

Se você está bem com a renomeação proposta, execute sem -n

    
por 02.02.2018 / 09:59
0

Tente algo assim

for x in *; do
    mv "${x}" FILE_NAME_NEW."${x#filename.New_}"
done

Use echo na frente de mv primeiro, para que você possa ver qual é o efeito antes de renomear os arquivos. "$ {x}" é a variável com seu nome de arquivo (por exemplo, filename.New_20160901.dat ) e "$ {x # filename.New_}" é o nome do arquivo com filename.New_ removido se estiver no início (por exemplo, 20160901.dat ).

    
por 02.02.2018 / 09:42
0

Para corresponder um arquivo que contenha o registro de data e hora (e não outros arquivos), use:

#!/bin/bash 

for x in filename.New_[0-9]*.dat; do
    echo "file --> $x"

    echo    mv "${x}" "${x/filename.New_/FILE_NAME_NEW.}"
done

Remova o eco na frente de mv para executar o movimento (depois que você estiver satisfeito com os arquivos selecionados com o script).

    
por 02.02.2018 / 20:38