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?

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).


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


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.


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

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.