
Eu sei comopegaro mtime de um arquivo no formato de época:
stat --format=%Y <file>
Mas não consegui descobrir comodefiniro mtime de um arquivo no formato de época. A página de manual touch(1) parece aceitar apenas um valor de "timestamp" (formato mais ou menos fixo que usa meses, dias, horas, minutos, etc.) ou uma "string de data legível por humanos em formato livre".
Existe outro utilitário que eu deveria procurar?
Obrigado.
Responder1
Pelo menos no mundo GNU:
touch --date=@1403970787 file
Como com date
.
Responder2
Com o touch
comando do GNU coreutils (ou seja, no Linux não embarcado e Cygwin), veja omanual completo(geralmente disponível localmente em formato info) para a documentação deformatos de entrada de data.Datas de épocasão indicados com o prefixo @
:
touch -d @1234567890 foo
Isso também funciona com o BusyBox (pelo menos em alguns sistemas, pode depender das opções de compilação).
Com *BSD, não acho que você possa fazer isso sozinho touch
, mas você pode chamar date
para formatar a época em um formato que touch
aceite.
touch -d "$(date -r 1234567890 +%Y%m%d%H%M.%S)" foo
O POSIX notoriamente carece de maneiras de manipular datas de época. Você podeusar perl.
Responder3
Com perl
:
$ perl -e 'utime (stat($_))[8], time(), $_ for @ARGV' file1 file2 ...
Isso mudará o mtime de todos os arquivos no formato @ARGV
. (stat($_))[8]
é a hora do arquivo.
utime
pode receber uma lista de arquivos, se você não se importa em alterar o horário, você pode tentar:
$ perl -e '$t = time(); utime $t, $t, @ARGV' file1 file2 ...
Observação
utime
depende da biblioteca de tempo de execução C e do sistema de arquivos que está sendo usado. veja mais em perldoc -f utime
e perldoc perlport
.