La combinaison de findet lsfonctionne bien pour
- noms de fichiers sans nouvelles lignes
- pas très grand nombre de fichiers
- noms de fichiers pas très longs
La solution:
find . -name "my-pattern" -print0 |
xargs -r -0 ls -1 -t |
head -1
Décomposons-le:
Avec findnous pouvons faire correspondre tous les fichiers intéressants comme celui-ci:
find . -name "my-pattern" ...
puis en utilisant, -print0nous pouvons passer tous les noms de fichiers en toute sécurité lscomme ceci:
find . -name "my-pattern" -print0 | xargs -r -0 ls -1 -t
des findparamètres et des modèles de recherche supplémentaires peuvent être ajoutés ici
find . -name "my-pattern" ... -print0 | xargs -r -0 ls -1 -t
ls -ttriera les fichiers par heure de modification (le plus récent en premier) et l'imprimera un par ligne. Vous pouvez utiliser -cpour trier par heure de création. Remarque : cela rompra avec les noms de fichiers contenant des nouvelles lignes.
Enfin head -1nous obtient le premier fichier dans la liste triée.
Remarque: xargs utilisez les limites du système à la taille de la liste d'arguments. Si cette taille dépasse, xargsappellera lsplusieurs fois. Cela interrompra le tri et probablement aussi la sortie finale. Courir
xargs --show-limits
pour vérifier les limites de votre système.
Remarque 2: à utiliser find . -maxdepth 1 -name "my-pattern" -print0si vous ne souhaitez pas rechercher de fichiers dans les sous-dossiers.
Note 3: Comme indiqué par @starfry - l' -rargument pour xargsempêche l'appel de ls -1 -t, si aucun fichier ne correspond au find. Merci pour la suggestion.