tente
rename -n s/filename.New_/FILE_NAME_NEW./ filename.New*
Se você está bem com a renomeação proposta, execute sem -n
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
tente
rename -n s/filename.New_/FILE_NAME_NEW./ filename.New*
Se você está bem com a renomeação proposta, execute sem -n
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
).
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).
Tags bash rename date shell shell-script