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