62 votes

Comment afficher le temps de modification d'un fichier ?

Je voudrais une méthode pour trouver et imprimer l'heure de modification d'un fichier, pour une utilisation dans un script bash.

J'ai trouvé :

ls -l $filename | cut -d ' ' -f '6-8'

Quelles sorties :

Jul 26 15:05

Bien que j'aimerais éviter d'analyser les données ls Il serait également utile d'y inclure l'année.

Idéalement, j'aimerais voir une sortie semblable à la sortie par défaut de la fonction date commandement.

Tue Jul 26 15:20:59 BST 2016

Quelles autres méthodes utiles sont disponibles ?

85voto

heemayl Points 85741

N'utilisez pas ls c'est un travail pour stat :

stat -c '%y' filename

-c nous permet d'obtenir une sortie spécifique, ici %y nous donnera l'heure de dernière modification du fichier dans un format lisible par l'homme. Pour obtenir le temps en secondes depuis Epoch, utilisez %Y :

stat -c '%Y' filename

Si vous voulez aussi le nom du fichier, utilisez %n :

stat -c '%y : %n' filename
stat -c '%Y : %n' filename

Définissez les spécificateurs de format en fonction de vos besoins. Vérifiez man stat .

Exemple :

% stat -c '%y' foobar.txt
2016-07-26 12:15:16.897284828 +0600

% stat -c '%Y' foobar.txt
1469513716

% stat -c '%y : %n' foobar.txt
2016-07-26 12:15:16.897284828 +0600 : foobar.txt    

% stat -c '%Y : %n' foobar.txt
1469513716 : foobar.txt

Si vous voulez une sortie comme Tue Jul 26 15:20:59 BST 2016 utiliser le temps d'Epoch comme entrée pour date :

% date -d "@$(stat -c '%Y' a.out)" '+%a %b %d %T %Z %Y'
Tue Jul 26 12:15:21 BDT 2016

% date -d "@$(stat -c '%Y' a.out)" '+%c'               
Tue 26 Jul 2016 12:15:21 PM BDT

% date -d "@$(stat -c '%Y' a.out)"
Tue Jul 26 12:15:21 BDT 2016

Vérifiez date pour répondre à vos besoins. Voir man date aussi.

1voto

te7 Points 111

J'ai essayé

ls -l $filename | cut -d ' ' -f '6-8'

mais si la date est inférieure à 10, il manque l'heure. Cela est dû à l'espace supplémentaire avant la date si celle-ci est inférieure à 10. Essayez ceci :

filename="test.txt"
ls -l $filename | awk -F ' ' '{print $6" "$7" "$8}'

La commande awk imprime les champs séparés par tous les espaces (-F ' '). J'espère que cela fonctionne. Je sais que cela ne répond pas à la question originale mais juste une clarification sur la commande ls pour juste la date et l'heure. Lorsque vous recherchez sur Google "ubuntu get date and time of file", cette question apparaît en tête de liste, ce qui est ce que je recherchais, puisque je n'ai pas besoin de l'année également. Pour l'année, la date et l'heure, vous pouvez essayer l'une des commandes suivantes. %m imprime le numéro du mois. %b imprime l'abréviation du mois : Laissez tomber le %H:%M si vous n'avez pas besoin des heures et des minutes. %-d n'imprime pas le zéro du jour du mois.

date -r $filename +"%Y %m %-d %H:%M"
date -r $filename +"%y %m %-d %H:%M"
date -r $filename +"%Y %b %-d %H:%M"
date -r $filename +"%y %b %-d %H:%M"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X