Existe uma maneira compatível com cross- * nix para obter o registro de data e hora modificado do arquivo?

2

Tentando resolver este problema, descobri soluções que não são compatíveis entre o Ubuntu e o osx. Desejo fazer um comando de substituição para os dois seguintes, que diferem em dois caracteres:

osx:

find . -type f -exec stat -f "%m {}" {} \;| sort -n | tail -n 1 | cut -d ' ' -f 2

ubu:

find . -type f -exec stat -c "%Y {}" {} \;| sort -n | tail -n 1 | cut -d ' ' -f 2
    
por audio.zoom 22.05.2012 / 20:19

1 resposta

2

O comando stat não faz parte do POSIX, portanto, os sistemas podem ter implementações diferentes.

Supondo que o Perl esteja disponível, o seguinte deve funcionar:

-exec perl -MFile::stat -e 'print stat($_)->mtime, " $_\n" for @ARGV' {} \;

-exec perl -e 'print ((stat($_))[9], " $_\n") for @ARGV' {} \;

A versão com -MFile::stat é mais legível, mas infelizmente várias vezes mais lenta.

O script completo ficaria assim:

find . -type f -exec perl -e 'print ((stat($_))[9], " $_\n") for @ARGV' {} + |
  sort -n | tail -n 1 | cut -d " " -f 2-

(observe o 2- no final)

    
por 22.05.2012 / 21:07