Alterar formato de data em nomes de arquivos

0

Estou recebendo e-mails, o formato do nome do arquivo é este (é o formato Unix para data + .report-server )

1509106656.32538_1.report-server

Agora tenho vários e-mails. Quero formatar todos os nomes de arquivos com um novo formato de data e hora como este.

dd-mm-yyyy.report-server
    
por DaviD 10.01.2018 / 12:44

3 respostas

1

Que tal isso:

for i in *.report-server; do echo mv "$i" "$(date -d@${i%%.*} +%d-%m-%Y.${i##*.})"; done

Isso faz um loop sobre os arquivos .report-server no diretório atual e para cada arquivo imprime uma linha como

mv 1509106656.32538_1.report-server 27-10-2017.report-server

onde você pode verificar o nome do arquivo. Se ele fizer o que você deseja, simplesmente remova echo do comando e execute-o para executar a renomeação.

Tenha cuidado ! Se você acabar tendo vários arquivos com a mesma data, mv irá (por padrão) substituir os primeiros de forma silenciosa. Se você quiser preservar a parte .32538_1 (presumivelmente única), altere ${i##*.} para ${i#*.} no comando. Se você quiser que mv pergunte antes de sobrescrever arquivos, adicione a opção -i .

    
por dessert 10.01.2018 / 13:12
1

Você pode usar o seguinte script como uma dica:

#!/bin/bash
for i in *.report-server; do
    timestamp=$(echo $i | cut -d. -f1)
    output_date=$(date +'%d-%m-%Y' -d @$timestamp)
    mv "$i" "${output_date}.report-server"
    
por Mukesh Sai Kumar 10.01.2018 / 13:13
1

Aqui está uma maneira de fazer isso usando rename ou prename baseado em perl (basicamente uma duplicata de Como posso converter em lote nomes de pastas de um formato de data para outro , com diferentes especificadores de formato):

$ rename -n -- '
  BEGIN{use Time::Piece};
  s/(\d{10})\.\d{5}_1/Time::Piece->strptime($1, "%s")->strftime("%d-%m-%Y")/e
' *.report-server
rename(1509106656.32538_1.report-server, 27-10-2017.report-server)

Remova o -n (ou altere para -v se quiser uma saída detalhada) quando estiver satisfeito por estar fazendo o que deseja.

    
por steeldriver 10.01.2018 / 14:34