Je suis nouveau sur Linux. J'utilise la ligne de commande. J'essaie d'afficher la date de dernière modification d'un fichier. Comment puis-je faire cela sous Linux à partir de la ligne de commande ?
Réponses
Trop de publicités?Comme mentionné par @edvinas.me, stat
vous donne diverses informations sur le fichier, dont la date de dernière modification.
Au début, j'étais confus avec Modifier et Changement juste pour clarifier, stat
les listes de sortie :
- Accès indique l'heure du dernier accès aux données (par exemple, lecture).
- Modifier indique l'heure de la dernière modification des données.
- Changement indique l'heure à laquelle l'état du fichier a été modifié pour la dernière fois.
Par exemple :
~ $ touch foo
~ $ stat foo
File: ‘foo’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 410397 Links: 1
Access: (0644/-rw-r--r--) Uid: (80972/ etomort) Gid: (18429/ eem_tw)
Access: 2015-09-21 12:06:11.343616258 +0200
Modify: 2015-09-21 12:06:11.343616258 +0200
Change: 2015-09-21 12:06:11.343616258 +0200
Birth: -
~ $ echo "Added bar to foo file" >> foo
~ $ stat foo
File: ‘foo’
Size: 42 Blocks: 8 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 410654 Links: 1
Access: (0644/-rw-r--r--) Uid: (80972/ etomort) Gid: (18429/ eem_tw)
Access: 2015-09-21 12:09:31.298712951 +0200
Modify: 2015-09-21 12:09:31.298712951 +0200
Change: 2015-09-21 12:09:31.302713093 +0200
Birth: -
~ $ chmod 444 foo
~ $ stat foo
File: ‘foo’
Size: 42 Blocks: 8 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 410654 Links: 1
Access: (0444/-r--r--r--) Uid: (80972/ etomort) Gid: (18429/ eem_tw)
Access: 2015-09-21 12:09:31.298712951 +0200
Modify: 2015-09-21 12:09:31.298712951 +0200
Change: 2015-09-21 12:10:16.040310543 +0200
Birth: -
Une autre méthode, plus souple, consiste à utiliser date -r
. De man date
:
-r, --reference=FILE
display the last modification time of FILE
Cela présente l'avantage de vous permettre de spécifier le format de sortie, par ex.
$ date -r foo
Thu Aug 31 10:36:28 AEST 2017
$ date -r foo -R
Thu, 31 Aug 2017 10:36:28 +1000
$ date -r foo -u
Thu Aug 31 00:36:28 UTC 2017
$ date -r foo +%s
1504139788
ls -l
devrait faire le travail.
Exemple :
#> ls -l /home/TEST/
total 16
-rw-r--r-- 1 rfmas1 nms 949 Nov 16 12:21 create_nd_lists.py
-rw-r--r-- 1 rfmas1 nms 0 Nov 16 12:35 enb_list
-rw-r--r-- 1 rfmas1 nms 0 Nov 16 12:35 nb_list
-rw-r--r-- 1 rfmas1 nms 0 Nov 16 12:35 nodes_ip.txt
-rw-r--r-- 1 rfmas1 nms 0 Nov 16 12:35 rnc_list
En s'appuyant sur Le commentaire de @Adam Taylor dans la réponse de @phoops et la réponse de @Sparhawk.
En particulier juste obtenir le fecha (en utilisant le 3 octobre 2019 pour les exemples car c'était mon dernier anniversaire)
-
stat -c %y file | cut -d' ' -f1
vous donnera2019-10-03
-
date +%F -r file
vous donnera également2019-10-03
-
date +%D -r file
vous donnera10/03/19
-
date +%x -r file
sera probablement donner soit10/03/2019
ou10/03/19
si vous êtes aux États-Unis et que vous êtes soit03/10/2019
ou03/10/19
si vous êtes au Royaume-Uni, pour ne citer que quelques exemples (il existe bien sûr d'autres possibilités)
Ces date
Les options de format sont, à ma connaissance, des combinaisons d'autres options de format. Voici quelques explications tirées du page de manuel :
%b nom du mois abrégé de la locale (par exemple, Jan)
Le nom complet du mois de la locale %B (par exemple, janvier)
...
%d jour du mois (par exemple, 01)
%D date ; identique à %m/%d/%y
%e jour du mois, avec un espace ; identique à %_d
%F date complète ; identique à %Y-%m-%d
...
%m mois (01..12)
...
Représentation de la date de la locale %x (par exemple, 12/31/99)
...
%y deux derniers chiffres de l'année (00..99)
Année %Y
...
Par défaut, la date remplit les champs numériques avec des zéros.
Les drapeaux optionnels suivants peuvent suivre `%' :- (trait d'union) ne pas remplir le champ
_ (trait de soulignement) Remplir d'espaces
0 (zéro) tampon avec des zéros
Utilisez les majuscules si possible
utiliser le cas contraire si possible
N.B. : Ces drapeaux ne fonctionnent pas sur le " formats combinés "comme %F
, %D
et %x
. Ils sont destinés aux " formats de champs singuliers ".
Apparemment, ce dernier drapeau ( # ) ne fonctionne pas comme je m'y attendais (par exemple, si date +%b
donne Oct
, date +%#b
donne OCT
à l'opposé de oCT
) Je suppose que c'est inutile, mais je pense qu'une option en minuscules serait plus utile. date +%#p
fait tourner date +%p
ce qui pourrait donner PM
o AM
en pm
o am
respectivement. Je suppose donc qu'il ne s'agit pas d'un changement de casse par caractère, mais que la casse de tous les caractères de la chaîne est définie par la casse opposée de la majorité des caractères. Voir aussi date +%P
donne pm
o am
mais ni l'un ni l'autre date +%^P
ni date +%#P
modifier sa production. Je pense que dans ce cas %P
est juste un alias pour %#p
et il semble que chaque fois que vous ajoutez plus d'un drapeau, le comportement est indéfini/imprévisible. ( Par exemple, date +%0-e
donne la même chose que date +%-e
: 3
et date +%-0e
donne la même chose que date +%0e
: 03
ce qui vous fait penser que seul le drapeau à côté de la lettre fonctionne ou que cela va de gauche à droite, mais les deux date +%#^p
et date +%^#p
donner pm
o am
[en fonction de l'heure, bien sûr] ) à moins qu'il y ait un ordre caché des opérations ? Désolé de m'éloigner du sujet...
Aussi, si vous exécutez la commande locale -k LC_TIME | grep ^d_fmt
vous pouvez voir le combo pour la locale spécifique de votre système (par exemple, d_fmt="%m/%d/%Y"
).
Et vous pouvez faire votre propre combinaison. Par exemple,
-
date +%^b\ %-e\ %Y -r file
vous donneraOCT 3 2019
- Réponses précédentes
- Plus de réponses