Pelo menos no mundo GNU:
touch --date=@1403970787 file
Como com date
.
Eu sei como obter o mtime de um arquivo no formato de época:
stat --format=%Y <file>
Mas não consegui descobrir como definir o mtime de um arquivo no formato de época. A página man touch (1) parece aceitar apenas um valor "timestamp" (formato mais ou menos fixo que usa meses, dias, horas, minas, etc) ou uma "string de data legível em formato livre na maioria das vezes".
Existe outro utilitário que eu deveria estar investigando?
Obrigado.
com perl
:
$ perl -e 'utime (stat($_))[8], time(), $_ for @ARGV' file1 file2 ...
Isso alterará o tempo de todos os arquivos em @ARGV
. (stat($_))[8]
é hora do arquivo.
utime
pode receber lista de arquivos, se você não se importa em alterar o atime, pode tentar:
$ perl -e '$t = time(); utime $t, $t, @ARGV' file1 file2 ...
Nota
utime
depende da biblioteca de tempo de execução C e o sistema de arquivos está usando. veja mais em perldoc -f utime
e perldoc perlport
.
Com o comando touch
do GNU coreutils (ou seja, no Linux e no Cygwin não integrados), veja o manual completo (geralmente disponível localmente no formato info) para a documentação de data formatos de entrada . Datas da epoca são indicadas com o prefixo @
:
touch -d @1234567890 foo
Isso também funciona com o BusyBox (pelo menos em alguns sistemas, pode depender de opções de compilação).
Com * BSD, acho que você não pode fazer isso com touch
sozinho, mas você pode chamar date
para formatar o horário da época em um formato que touch
aceita.
touch -d "$(date -r 1234567890 +%Y%m%d%H%M.%S)" foo
POSIX notoriamente carece de maneiras de manipular datas de época. Você pode usar o perl .
Tags shell touch timestamps