stat: data e hora de modificação de um arquivo

6

Eu uso stat -f %m .bashrc para obter o tempo de modificação do meu .bashrc no osx. Mas quando eu executo o mesmo comando no Ubuntu, ele gera um erro:

stat: cannot read file system information for %m': No such file or directory

existe uma maneira compatível de conseguir isso?

    
por fushupinnanren 06.03.2017 / 19:04

3 respostas

5

O Ubuntu usa o GNU coreutils stat , enquanto o OSX usa a variante BSD. Então no Ubuntu o comando é um pouco diferente:

stat -c %Y .bashrc

De man stat :

   -c  --format=FORMAT
          use the specified FORMAT instead of the default; output  a  new‐
          line after each use of FORMAT

e:

   %Y     time of last data modification, seconds since Epoch

Se você quiser uma maneira portátil de executá-los, independentemente do sistema operacional, existem várias maneiras de fazer isso. Acho que definiria uma variável uma vez para os parâmetros apropriados:

if uname | grep -q "Darwin"; then
    mod_time_fmt="-f %m"
else
    mod_time_fmt="-c %Y"
fi

E, em seguida, use esse valor no comando stat sempre que necessário:

stat $mod_time_fmt .bashrc
    
por 07.03.2017 / 02:07
6

Depende do que você quer dizer com "isso". Se você está perguntando se existe uma maneira portátil de obter o arquivo mtime com stat(1) , então não, não existe. O BSD stat(1) é diferente do Linux stat(1) .

Se você está perguntando se existe uma maneira portátil de obter o arquivo mtime , então sim, você pode fazer isso com perl(1) :

perl -e 'print +(stat $ARGV[0])[9], "\n"' file
    
por 06.03.2017 / 19:17
5

uma vez que as versões OSX e Ubuntu de stat têm algumas diferenças em que OSX stat padroniza a saída e Linux stat padroniza para verbalizar alguns aros precisariam ser saltados. Uma possibilidade seria simplesmente usar um alias no OSX que faria o stat executar o mesmo em ambos.

Se você não se importar em configurar um alias para forçar a saída detalhada de stat no OSX com alias stat="stat -x" , você não precisará do perl.

stat .bashrc| grep Modify é tudo que você precisa no Ubuntu. se você definir o alias como acima, ele funcionará em OSX, bem

Exemplo do Ubuntu 14.04.5 Resultados virtualmente idênticos podem ser obtidos no Ubuntu 16.04

   stat .bashrc| grep Modify
Modify: 2014-03-30 23:14:47.658210121 -0500

Se tudo o que você quer é o timestamp, você pode remover o Modify: e reter o restante com

stat .bashrc| grep Modify | cut -c 9-

Fontes:

link

Saída do stat no OSX

    
por 06.03.2017 / 19:44