stat: timestamp di modifica di un file


11

Uso stat -f %m .bashrcper ottenere il tempo di modifica del mio .bashrc su osx. Ma quando eseguo lo stesso comando su Ubuntu, sputa errore:

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

esiste un modo compatibile per raggiungere questo obiettivo?

Risposte:


12

Ubuntu utilizza i coreutils GNU stat, mentre OSX utilizza la variante BSD. Quindi su Ubuntu il comando è leggermente diverso:

stat -c %Y .bashrc

Da 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 vuoi un modo portatile per eseguirli indipendentemente dal sistema operativo, allora ci sono diversi modi per farlo. Penso che impostarei una variabile una volta sui parametri appropriati:

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

E quindi utilizzare questo valore nel statcomando ovunque sia necessario:

stat $mod_time_fmt .bashrc

7

Dipende da cosa intendi per "questo". Se stai chiedendo se c'è un modo comune di ottenere un file è mtimecon stat(1), allora no, non c'è. BSD stat(1)è diverso da Linux stat(1).

Se stai chiedendo se esiste un modo portatile per ottenere un file mtime, quindi sì, puoi farlo con perl(1):

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

5

poiché le versioni di OSX e Ubuntu statpresentano alcune differenze in quanto OSX statimposta per default l'output e Linux statper definire dettagliatamente alcuni cerchi dovrebbe essere saltato. Una possibilità sarebbe quella di usare semplicemente un alias su OSX per fare in modo che stat esegua lo stesso su entrambi.

Se non ti dispiace impostare un alias per forzare l'output dettagliato di statsu OSX, alias stat="stat -x"allora non hai bisogno di perl.

stat .bashrc| grep Modify è tutto ciò che serve sotto Ubuntu. se si imposta l'alias come sopra, funziona anche in OSX

Esempio da Ubuntu 14.04.5 È possibile ottenere risultati praticamente identici da Ubuntu 16.04

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

Se tutto ciò che desideri è il timestamp, puoi rimuovere Modify:e conservare il resto

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

fonti:

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

Uscita di stat su OSX


penso che ti manchi l'opzione -x su OSX.
Fushupinnanren,

@Derry hai ragione, purtroppo devo fare affidamento sulla ricerca dei bit OSX in quanto non ho OSX. Risposta corretta.
Elder Geek,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.