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