223 votes

Unix/Linux rechercher et trier par date de modification

Comment puis-je faire un simple find qui ordonnerait les résultats par ordre de modification la plus récente ?

Voici l'actuel find J'utilise (je fais un Shell escape en PHP, c'est donc le raisonnement pour les variables) :

find '$dir' -name '$str'\* -print | head -10

Comment puis-je faire en sorte que la recherche soit ordonnée en fonction des dernières modifications ? (Notez que je ne veux pas que le tri se fasse "après" la recherche, mais plutôt que les résultats soient classés en fonction des dernières modifications).

0 votes

github.com/shadkam/recentmost ferait ce que l'on souhaite, mais il faut le construire.

1voto

Akash Points 11

Utilisez :

find . -type f -mtime 0 -printf "[%TD %TI:%TM%Tp] %s %p\n" | sort -n | awk '{
    hum[1024**4]="TB"; hum[1024**3]="GB"; hum[1024**2]="MB"; hum[1024]="KB"; hum[0]="B";
    for (x=1024**4; x>=1024; x/=1024){
    if ($3>=x) { printf $1" "$2"\t%7.2f %s\t%s\n",$3/x,hum[x],$4;break }
    }}';

Cette commande permet de trier les fichiers par date de modification.

Et afficher comme :

[12/05/13 03:10PM] 1.75 MB ./file.text
[12/06/13 11:52PM] 2.90 MB ./file2.mp4
[12/07/13 04:11PM] 4.88 MB ./file3.mp4
[12/07/13 09:17PM] 4.74 MB ./test.apk

0 votes

J'ai amélioré ce sript pour gérer les espaces dans les noms de fichiers, voir superuser.com/a/777007/134532

1voto

alesplin Points 217

Si votre find est très simple, vous pouvez peut-être vous en passer et utiliser simplement ls :

ls -1 *.cc # -r -t optional

0voto

alexgolec Points 109

Je ne pense pas que find a des options pour modifier l'ordre de sortie. -mtime y -mmin vous permettra de restreindre les résultats aux fichiers qui ont été modifiés au cours d'une certaine période, mais la sortie ne sera pas triée - vous devrez le faire vous-même. GNU find a un -printf qui, entre autres choses, vous permettra d'imprimer l'heure de modification de chaque fichier trouvé (chaînes de format %t o %Tk ) ; cela pourrait vous aider à trier les find comme vous le souhaitez.

0voto

john smith Points 1

Si vous voulez commander tous les fichiers PNG par temps en $PWD :

Cette simple ligne simple donne toute la flexibilité de regexp sur find et sur ls .

find $PWD -name "*.png" -print0 | xargs -0 ls -laht | less

0voto

jan Points 225

J'ai amélioré la réponse d'Akashs en faisant en sorte que le script gère correctement les espaces dans les noms de fichiers :

find . -type f -mtime 0 -printf ";[%TD %TI:%TM%Tp];%s;%p\n" | sort -n | awk -F ";" '{
    hum[1024**4]="TB"; hum[1024**3]="GB"; hum[1024**2]="MB"; hum[1024]="KB"; hum[0]="B";
    for (x=1024**4; x>=1024; x/=1024){
    if ($3>=x) { printf $1" "$2"\t%7.2f %s\t%s\n",$3/x,hum[x],$4;break }
    }}';

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X