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?
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
.
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"
date -r <filename>
fonctionne bien. Les chaînes de format standard date
fonctionnent, mais la valeur par défaut est identique à celle que date
donne normalement, à quoi il ressemble.