stat: horodatage de modification d'un fichier

11

J'utilise stat -f %m .bashrcpour obtenir l'heure de modification de mon .bashrc sur osx. Mais lorsque 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

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

fushupinnanren
la source

Réponses:

12

Ubuntu utilise les coreutils GNU stat, tandis qu'OSX 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 un moyen portable de les exécuter quel que soit le système d'exploitation, il existe plusieurs façons de le faire. Je pense que je définirais une variable une fois pour les paramètres appropriés:

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

Et puis utilisez cette valeur dans la statcommande où vous en avez besoin:

stat $mod_time_fmt .bashrc
Traumatisme numérique
la source
7

Cela dépend de ce que vous entendez par «ceci». Si vous demandez s'il y a un moyen portable pour obtenir un fichier est mtimeavec stat(1), alors non, il n'y a pas. BSD stat(1)est différent de Linux stat(1).

Si vous demandez s'il existe un moyen portable d'obtenir un fichier mtime, alors oui, vous pouvez le faire avec perl(1):

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

étant donné que les versions OSX et Ubuntu statont des différences dans le fait que les statvaleurs par défaut OSX pour une sortie laconique et les statvaleurs par défaut Linux pour verbaliser certains cerceaux devraient être sautées. Une possibilité serait d'utiliser simplement un alias sur OSX pour que stat fonctionne de la même façon sur les deux.

Si cela ne vous dérange pas de définir un alias pour forcer la sortie détaillée de statsur OSX avec alias stat="stat -x"alors vous n'avez pas besoin de perl.

stat .bashrc| grep Modify est tout ce dont vous avez besoin sous Ubuntu. si vous définissez l'alias comme ci-dessus, cela fonctionne également sous OSX

Exemple avec Ubuntu 14.04.5 Des résultats pratiquement identiques peuvent être obtenus avec Ubuntu 16.04

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

Si vous voulez simplement l'horodatage , vous pouvez décaper que Modify:et conserver le reste avec

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

Sources:

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

Sortie de stat sur OSX

Elder Geek
la source
je pense que vous manque l'option -x sur OSX.
fushupinnanren
@Derry, vous avez raison, je dois malheureusement compter sur la recherche des bits OSX car je n'ai pas OSX. Réponse corrigée.
Elder Geek