web-dev-qa-db-fra.com

Comment afficher l'heure modifiée d'un fichier?

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

Je suis venu avec:

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

Quelles sorties:

Jul 26 15:05

Bien que je veuille éviter d’analyser ls, il serait également utile d’indiquer l’année.

Idéalement, j'aimerais voir une sortie similaire à la sortie par défaut de la commande date.

Tue Jul 26 15:20:59 BST 2016

Quelles autres méthodes utiles sont disponibles?

29
Arronical

N'utilisez pas ls, il s'agit d'un travail pour stat:

stat -c '%y' filename

-c nous permet d'obtenir une sortie spécifique. Ici, %y nous indiquera la dernière heure de modification du fichier au 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 telle que Tue Jul 26 15:20:59 BST 2016, utilisez le temps de l'époque 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 les spécificateurs de format de date pour répondre à vos besoins. Voir aussi man date.

41
heemayl

J'ai essayé

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

mais si la date est inférieure à 10, le temps manque. Ceci à cause de l'espace supplémentaire avant la date s'il est inférieur à 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 ''). Esperons que ça marche. Je sais que cela ne répond pas à la question initiale, mais simplement une clarification de la commande ls pour la date et l'heure. Lorsque vous recherchez "ubuntu obtenir la date et l'heure du fichier" sur Google, cette question est listée en haut, ce que je cherchais, car 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 ci-dessous. % m affiche le numéro du mois. % b affiche l'abréviation du mois: Supprimez le% H:% M si vous n'avez pas besoin des heures et des minutes. % -d n'imprime pas le zéro non significatif pour le 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"
1
te7

date -r <filename> fonctionne bien. Les chaînes de format standard datefonctionnent, mais la valeur par défaut est identique à celle que datedonne normalement, à quoi il ressemble.

0
Someone