Liste tous les fichiers récemment modifiés (récursif)

21

Donc, je veux afficher (via lspar 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 regarder "plus profondément".

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 myfile1et (si possible) MySub/sub1.

Est-ce faisable avec une seule commande?

DasSaffe
la source

Réponses:

39

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

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

Ajoutez-y une redirection (aka > results.txtpour 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'à présent (+7 serait 'plus vieux que 7 jours')
  • et il l'alimente ensuite lspour afficher une longue liste

Vous pouvez également jouer avec le ls -lrôle:

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

affichera une méthode arborescente avec des répertoires entre les fichiers dans la longue liste (1) ou la courte liste (2).

Rinzwind
la source
4
finda l' lsoption pour que vous puissiez le fairefind . -type f -mtime -7 -ls
heemayl
Bien sûr, mais cela le rend un peu plus générique (j'utilise cette méthode pour trouver les fichiers que je dois supprimer et je peux changer cette commande pour le faire :))
Rinzwind
3
Il est également plus approprié d'utiliser find ... -exec ls -l {} +ce qui s'exécute ls -lbeaucoup plus efficacement - moins de fois avec plusieurs paramètres. Il s'agit d'une option standard findspécifiée par POSIX.
pabouk du
5

Avec zsh:

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

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

heemayl
la source
2

La commande suivante fait rêver 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 recherche les fichiers dans l'arborescence de répertoires en cours qui ont été modifiés au cours des 7 derniers jours, affiche la date de modification + l'heure et le chemin, triés les plus récents en premier.

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 à tous les commentaires des utilisateurs d'ubuntu.

MrWatson
la source
La seule solution qui fonctionnait bien pour moi sur Mac. Merci!
artnikpro
Votre bienvenue @artnikpro!
MrWatson
1

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

ls -alRt docroot

ou

ls -alRt /path/to/top/level/directory
heynnema
la source
0

7 jours c'est 60 secondes * 60 minutes * 24 heures * 7 jours = 604800 secondes

Découvrez la date actuelle en secondes (heure de l'époque Unix):

$ date +%s
1448876323

Soustrayez les 7 jours en secondes:

expr $(date +%s) - 604800
1448271548

Maintenant, prenez la statcommande et imprimez les statistiques pour tous les fichiers au format "nom + heure en secondes" et utilisez awkpour rogner les fichiers dont l'heure de modification est supérieure à cette 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

Sergiy Kolodyazhnyy
la source
2
Notez qu'au lieu de awk '$2 > 1448271265 {print $0}'vous pouvez dire directement awk '$2 > 1448271265'. En condition vraie, awk imprime la ligne actuelle comme action par défaut.
fedorqui