Aqui está um loop de shell simples para (cuidadosamente) renomear os arquivos como eu acho que você está perguntando:
d=$(date +%y%m%d-%y%m%d-%H%M%S)
for f in Abc_*.*.*.*_*.txt
do
new=${f%_*}_${d}.csv
[ ! -f "$new" ] && mv "$f" "$new"
done
Primeiro, captura o registro de data e hora, no formato que você escreveu, em uma variável chamada d
. Em seguida, ele passa por um formato glob simplista para pegar todos os arquivos cujo nome começa com "Abc_" e depois tem qualquer coisa entre os três períodos, seguido por qualquer coisa, seguido por um sublinhado e qualquer coisa, terminando em ".txt". / p>
Ele calcula o novo nome do arquivo retirando tudo (incluindo e) após o último sublinhado e, em seguida, acrescenta o registro de data e hora ( ${d}
) e a nova extensão ".csv".
Se esse novo nome de arquivo não existir, ele renomeará o arquivo. Remova a parte [ ! -f "$new" ] &&
se você não se preocupa em destruir arquivos existentes.
Adicione um echo
antes do mv
se você quiser ver uma execução seca do que faria antes de executá-lo.
Quando eu o executo, vejo:
$ touch Abc_10.11.76.112_001.txt Abc_192.168.1.164_001.txt Abc_54.78.1.1_002.txt
$ d=$(date +%y%m%d-%y%m%d-%H%M%S)
$ for f in Abc_*.*.*.*_*.txt; do new=${f%_*}_${d}.csv; [ ! -f "$new" ] && mv "$f" "$new"; done
$ ls -1
Abc_10.11.76.112_160913-160913-140649.csv
Abc_192.168.1.164_160913-160913-140649.csv
Abc_54.78.1.1_160913-160913-140649.csv