Comment puis-je faire rechercher des fichiers dans l'ordre chronologique inverse?

17

Je veux trouver des fichiers dans des sous-répertoires triés par horodatage (de création), les plus récents en premier.

J'ai regardé la page de manuel, mais elle semble vous laisser filtrer uniquement par horodatage plutôt que trier par horodatage.

À quelles options puis-je passer pour findy parvenir? Alternativement, comment puis-je le combiner avec un autre outil, comme sorttrier par horodatage?

merlin2011
la source
1
Vous ne pouvez rien faire finddans un ordre trié particulier, au-delà du choix entre une recherche en profondeur d'abord et une recherche en premier.
Jonathan Leffler
@ merlin2011, veuillez revoir votre sélection de réponses ici - la réponse actuellement sélectionnée est boguée (générera des sorties qui ne sont pas réellement correctement triées) quand il y a plus de fichiers trouvés findque ne peut être transmis à une seule instance de ls.
Charles Duffy
@CharlesDuffy, merci pour la note! J'ai mis à jour les réponses acceptées.
merlin2011

Réponses:

32

Bien que la solution de Paul soit généralement correcte, elle implique plus d'E / S que simplement:

find bin/ -type f -printf '%Ts\t%p\n' | sort -nr | cut -f2
Peter Mortensen
la source
Et si findrenvoie des millions de fichiers? Le tri ne va-t-il pas tous les trier en une très longue liste? Est-ce que ça va encore être efficace? (Au lieu de trier chaque répertoire indépendamment.)
Peter Mortensen
1
Ne fonctionne pas avec des personnages amusants dans les noms de fichiers, comme les sauts de ligne
Boris Brodski
2
Cela ne mérite qu'un commentaire sur la réponse de user7385, mais je n'ai pas la réputation de le faire. find bin/ -type f -printf '%Ts\t%p\0' | sort -nrz | cut -f2 -z | xargs -0 lsLes nouvelles versions de cutl'option -z, donc les noms de fichiers avec des nouvelles lignes fonctionneraient.
MattBlissett
La quantité d'E / S n'est même pas la principale raison de préférer cette réponse - l' exactitude est une distinction beaucoup plus critique. L' xargs -0 ls -tapproche ne fonctionnera pas correctement lorsqu'il y a tant de fichiers qui xargsdoivent démarrer lsplus d'une fois, mais cette approche continuera de fonctionner.
Charles Duffy
@PeterMortensen, "les trier tous en une très longue liste" est le seul moyen de les trier qui retourne réellement un résultat correct. De plus, l'autre réponse / acceptée ne "trie pas chaque répertoire indépendamment" non plus (si l'on voulait trier un seul répertoire sans se reproduire, on pourrait l'utiliser -maxdepth 1sur le find).
Charles Duffy