web-dev-qa-db-fra.com

STAT: modification Timestamp d'un fichier

J'utilise stat -f %m .bashrc Pour obtenir une durée de modification de mon .CASHRC sur OSX. Mais quand j'exécute la même commande sur Ubuntu, cela crache une erreur:

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

y a-t-il un moyen compatible pour y parvenir?

11
fushupinnanren

Ubuntu utilise le GNU corutils stat, osex utilise la variante BSD. Donc sur Ubuntu, la commande est un peu différente:

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

et:

   %Y     time of last data modification, seconds since Epoch

Si vous voulez une façon portable de gérer ces systèmes d'exploitation, alors il y a plusieurs façons de le faire. Je pense que je définirais une variable une fois sur les paramètres appropriés:

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

Puis utilisez cette valeur dans la commande stat où vous avez besoin:

stat $mod_time_fmt .bashrc
12
Digital Trauma

Cela dépend de ce que vous entendez par "ceci". Si vous demandez s'il existe un moyen portable d'obtenir un fichier mtime avec stat(1), alors non, il n'y a pas. BSD stat(1) est différente de Linux stat(1).

Si vous demandez s'il existe une façon portable d'obtenir un fichier mtime, alors oui, vous pouvez le faire avec Perl(1):

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