Como eu defino o mtime de um arquivo no formato de época?

11

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.

    
por eil 28.06.2014 / 17:50

3 respostas

10

Pelo menos no mundo GNU:

touch --date=@1403970787 file

Como com date .

    
por 28.06.2014 / 17:54
1

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 .

    
por 28.06.2014 / 18:11
0

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 .

    
por 29.06.2014 / 01:10