web-dev-qa-db-fra.com

Répertorie tous les fichiers récemment modifiés (récursifs)

Je souhaite donc afficher (via ls par exemple) tous les fichiers qui ont été modifiés au cours des sept derniers jours. Si je suis dans mon dossier docroot, il devrait pouvoir être "plus profond".

Par exemple:

File        Last changed
docroot
|- myfile1  30.11.2015
|- myfile2  10.11.2015
|- MySub
   |-sub1   30.11.2015
   |-sub2   10.11.2015

Ainsi, le ls (ou ce qui convient) devrait sortir myfile1 et (si possible) MySub/sub1.

Est-ce faisable avec une commande?

20
DasSaffe

Bien sûr. À partir du répertoire dans lequel vous vous trouvez:

find . -type f -mtime -7 -exec ls -l {} \; 

Ajoutez-y une redirection (alias > results.txt pour les stocker dans ce fichier).

  • type f ne fait que des fichiers et non des répertoires
  • mtime -7 fait il y a 7 jours jusqu'à maintenant (+7 serait 'plus vieux que 7 jours')
  • et il le nourrit alors à ls pour afficher une longue liste

Vous pouvez aussi jouer avec la partie ls -l:

find . -type f -mtime -7 -exec ls -Rl --time-style=long-iso {} \; 
find . -type f -mtime -7 -exec ls -R  --time-style=long-iso {} \; 

montrera un arbre comme méthode avec des répertoires entre les fichiers dans la liste longue (1) ou la liste courte (2).

37
Rinzwind

Avec zsh:

ls -l **/*(.m-7)
  • **/* va chercher les fichiers récursivement à partir du répertoire courant

  • (.m-7) est le qualificatif global où . indique un fichier normal, m-7 indique des fichiers modifiés au cours des 7 derniers jours.

5
heemayl

La commande suivante fonctionne à merveille sur Mac OSX - peut-être aussi sur Ubuntu…

find . -type f -mtime -7 -exec stat -lt "%Y-%m-%d %H:%M:%S" {} \; | cut -d\  -f6- | sort -r

Cela permet de rechercher dans l’arborescence actuelle les fichiers qui ont été modifiés au cours des 7 derniers jours, d’envoyer la date de modification, l’heure et le chemin, en commençant par le plus récent.

Exemple de sortie:

2018-02-21 22:06:30 ./fmxmlsnippet.xml
2018-02-19 12:56:01 ./diff.html
2018-02-19 12:44:37 ./temp/iDDR/XMSC_fmxmlsnippet.xml
2018-02-18 22:04:05 ./temp/iDDR/XMFD_fmxmlsnippet.xml
2018-02-15 10:18:27 ./xml/iDDR/XML2_fmxmlsnippet.xml
2018-02-15 10:13:29 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout.xsl
2018-02-15 10:11:36 ./xsl/.DS_Store
2018-02-15 10:10:51 ./xsl/_inc/inc.XML2_fmCM_ReportReferencesToExternalFiles.xsl
2018-02-15 10:10:09 ./xsl/_inc/.DS_Store
2018-02-15 10:07:35 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout-NoAnchors.xsl
2018-02-15 10:07:35 ./xsl/_inc/inc.XML2_fmCM_AnalyseLayout.xsl

Je serais reconnaissant de tout commentaire des utilisateurs d'ubuntu.

2
MrWatson

Pas exactement ce qui était demandé ... mais beaucoup plus facile à retenir ...

ls -alRt docroot

ou

ls -alRt /path/to/top/level/directory
1
heynnema

7 jours soit 60 secondes * 60 minutes * 24heures * 7 jours = 604800 secondes

Découvrez la date actuelle en secondes (heure de la période Unix):

$ date +%s
1448876323

Soustrayez les 7 jours en secondes:

expr $(date +%s) - 604800
1448271548

Maintenant, prenez la commande stat et imprimez les statistiques de tous les fichiers au format "nom + temps en secondes" et utilisez awk pour rogner les fichiers dont le temps de modification est supérieur à la date que nous avons calculée.

$ stat --printf="%n %Y\n" $HOME/* | awk '$2 > 1448271265 {print $0}'
/home/xieerqi/1448428697574.png 1448429613
/home/xieerqi/1448763343273.png 1448763478
/home/xieerqi/1510DRIVE 1448352453
/home/xieerqi/addRemoveDistribution 1448666843
/home/xieerqi/add-update.awk 1448716356
/home/xieerqi/add-update.sh 1448625092

Les 3 derniers fichiers sont particulièrement intéressants, car je sais que je les travaillais il y a moins de 7 jours. Donc je sais que ça marche

0