Altere o registro de data e hora para uma data específica, mantendo o tempo existente

2

Tenho cerca de 100 imagens .jpeg para as quais gostaria de alterar o carimbo de data / hora do arquivo. Já vi muitos exemplos de usar touch para modificar o registro de data e hora com base no número de dias, horas etc., mas eles não funcionam na minha situação.

Eu tentei usar touch -d "-1969 days ago" em um dos arquivos, mas o novo horário estava longe - 10 de julho de 2021 em vez de 25 de maio de 2014.

Existe alguma maneira de alterar todas as marcações de horário de arquivo em um diretório para uma data específica (2014-05-25), mantendo a parte da hora (14h30 no exemplo abaixo) da data e hora?

Por exemplo, 2009-01-02 02:30 PM timestamp para 2014-05-25 2:30 PM.

Obrigado.

    
por iembry 19.02.2016 / 05:23

1 resposta

2

Você pode usar uma combinação de date e touch , aqui GNU coreutils.

Se eu o ler corretamente, você deseja uma data específica e manter o tempo de arquivo, como no HMS. Não definir cada arquivo como 300 dias antes do valor atual.

Você pode criar esse tempo combinando a string 2014-05-25 com o tempo extraído dos arquivos usando date , por exemplo:

$ date +"2014-05-25 %T.%N" -r file.jpg
2014-05-25 18:06:28.277679656

Em seguida, combine fazendo algo como:

for f in *.jpg; do touch -d "$(date +"2014-05-25 %T.%N" -r "$f")" "$f"; done

Observe que isso pode atrapalhar o horário de verão e o fuso horário.

Uma alternativa pode ser adicionar %z na string de final de data ou adicionar -u a date options.

TZ=UTC0 touch -d "$(date -u +"2014-05-25 %T.%N" -r "$f")"

Teste

Teste, teste e teste antes da ação. Verifique com ls --full-time , eco em vez de toque, etc. find ... -printf também tem opções de hora / data.

Você pode até fazer um backup dos tempos em um arquivo de texto.

Notas:

De Q:

  • 1969 dias é 29 de setembro de 2010.
  • 1969 dias no futuro é 11 de julho de 2021 (pelo menos no meu fuso horário).
  • Para começar a 25 de maio de 2014 a partir de "-1969 days ago" , a data atual tem de ser 15 de outubro de 2019.

O problema com "-1969 days ago" é que você tem menos na frente do tempo.

Menos + menos = mais

Remova o sinal de menos ou remova a parte  ago .

1969 days ago é 29 de setembro de 2010, assim como -1969 days

    
por 19.02.2016 / 09:37

Tags