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

11

Eu uso stat -f %m .bashrcpara obter tempo de modificação do meu .bashrc no osx. Mas quando executo o mesmo comando no ubuntu, ele cospe erro:

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

existe uma maneira compatível de conseguir isso?

fushupinnanren
fonte

Respostas:

12

O Ubuntu usa os coreutils GNU stat, enquanto o OSX usa a variante BSD. Portanto, 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ê deseja uma maneira portátil de executá-las independentemente do sistema operacional, existem várias maneiras de fazê-lo. Eu acho que definiria uma variável uma vez com os parâmetros apropriados:

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

E use esse valor no statcomando sempre que necessário:

stat $mod_time_fmt .bashrc
Trauma Digital
fonte
7

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

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

perl -e 'print +(stat $ARGV[0])[9], "\n"' file
Satō Katsura
fonte
5

uma vez que as versões OSX e Ubuntu stattêm algumas diferenças em que os statpadrões OSX para saída concisa e os statpadrões Linux para detalhamento de alguns hoops precisariam ser ultrapassados. Uma possibilidade seria simplesmente usar um alias no OSX para fazer o stat executar o mesmo em ambos.

Se você não se importa em definir um alias para forçar a saída detalhada do statOSX alias stat="stat -x", não precisa do perl.

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

Exemplo do Ubuntu 14.04.5 Resultados praticamente 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 carimbo de data e hora, você pode remover o Modify:e reter o restante com

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

Fontes:

https://ss64.com/osx/stat.html

Saída de stat no OSX

Elder Geek
fonte
Eu acho que você está faltando -x opção no OSX.
fushupinnanren
@ Derry você está correto, infelizmente eu tenho que confiar em pesquisas para os bits OSX, pois eu não tenho OSX. Resposta corrigida.
Elder Geek