Solution 1 :
find
traversera l'arborescence des répertoires dans l'ordre où les éléments sont stockés dans les entrées du répertoire. Ce sera (principalement) cohérent d'une exécution à l'autre, sur la même machine et sera essentiellement "l'ordre de création des fichiers/répertoires" s'il n'y a pas eu de suppressions.
Cependant, certains systèmes de fichiers réorganisent les entrées de répertoire dans le cadre d'opérations de compactage ou lorsque la taille de l'entrée doit être étendue, il y a donc toujours une petite chance que l'ordre "brut" change avec le temps. Si vous souhaitez une commande cohérente, faites passer la sortie par une étape de tri supplémentaire.
Solution 2 :
Vous ne devriez pas vous fier à un ordre de sortie particulier de find
et à la place devrait utiliser sort
et d'autres moyens pour contrôler spécifiquement la commande.
Solution 3 :
Je travaille sous UNIX/Linux depuis 1984/1991 respectivement et la première commande qui m'a été enseignée était find. Linux/GNU a mis à peu près tout ce dont vous avez besoin dans la commande de recherche actuelle, alors jouez avec.
Voici quelques conseils utiles pour trier la sortie de la recherche. L'option -printf vous offre de nombreuses options pour permettre un tri plus complexe et une présentation des informations sur les fichiers. C'est le meilleur pour des problèmes comme celui-ci. Jouez avec pour voir ce qui fonctionnera pour vous. En utilisant -printf, vous pouvez personnaliser et délimiter les résultats comme vous le souhaitez. Cela aide un peu lorsque vous devez post-traiter les résultats. J'espère que cela aidera quelqu'un.
-
Si vous utilisez -ls et souhaitez trier par nom de fichier, le 11e champ est le nom du fichier, vous pouvez donc effectuer les opérations suivantes. L'option sort -k peut également accepter plusieurs champs à trier.
trouver /chemin -ls | trier -k11
-
Si vous souhaitez un contrôle plus fin du grain, c'est-à-dire un tri par date/heure dans l'ordre croissant ou décroissant, utilisez l'option -printf "". Voir le manuel pour plus de détails, mais ce qui suit est un exemple qui s'imprimera avec des fractions de seconde donc c'est très précis.
EXEMPLE DATE/HEURE :2016-09-17+12:09:57.9013929800
find /path -printf "%T+ %p\n" | sort -n # Ascending
find /path -printf "%T+ %p\n" | sort -nr # Descending
Une autre façon de le faire sans caractères dans la chaîne de date/heure est.
EXEMPLE DATE/HEURE :20160917120013.8101685040
find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n