quel est l'ordre de tri par défaut pour les entrées renvoyées par la commande linux find?
Par exemple, si j'émets
find . -type f -name '*mp3'
et la sortie se compose de plusieurs fichiers dans plusieurs sous-dossiers, quel est l'ordre par défaut dans lequel les répertoires sont répertoriés? Dans le même temps, quel est l'ordre de tri dans lequel les fichiers d'un répertoire individuel sont répertoriés?
Parfois, il revient:
./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3
Voyez comment le contenu du répertoire B est d'abord répertorié, puis celui du répertoire A. En même temps, dans le répertoire A, les fichiers sont répertoriés dans un ordre amusant.
-s
paramètre pour trier alphabétiquement la sortie.Réponses:
find
traversera l'arborescence du répertoire dans l'ordre où les éléments sont stockés dans les entrées du répertoire. Cela sera (principalement) cohérent d'une exécution à l'autre, sur la même machine et sera essentiellement "ordre de création de fichier / répertoire" s'il n'y a pas eu de suppression.Cependant, certains systèmes de fichiers réorganisent les entrées de répertoire dans le cadre des opérations de compactage ou lorsque la taille de l'entrée doit être augmentée, il y a donc toujours une petite chance que l'ordre "brut" change avec le temps. Si vous souhaitez un ordre cohérent, alimentez la sortie à travers une étape de tri supplémentaire.
la source
find /path/ -exec ...
avec un fonctionnement beaucoup plus rapidefind /path/
pour obtenir la liste triée des fichiers en premier.Vous ne devez pas vous fier à un ordre de sortie particulier
find
et utiliser plutôt d'sort
autres moyens pour contrôler spécifiquement l'ordre.la source
Je travaille sous UNIX / Linux depuis 1984/1991 respectivement et la première commande qui m'a été enseignée a été find. Linux / GNU a mis à peu près tout ce dont vous avez besoin dans la commande find actuelle, alors jouez avec.
Voici quelques conseils utiles pour trier la sortie de 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 beaucoup lorsque vous devez post-traiter les résultats. J'espère que ça aidera quelqu'un.
Si vous utilisez -ls et souhaitez trier par nom de fichier, le 11ème champ est le nom de fichier, vous pouvez donc effectuer les opérations suivantes. L'option de tri -k peut également prendre plusieurs champs pour trier.
trouver / chemin -ls | trier -k11
Si vous voulez un contrôle plus fin du grain 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 en quelques fractions de seconde donc il est très précis.
EXEMPLE DATE / HEURE: 2016-09-17 + 12: 09: 57.9013929800
Une autre façon de procéder sans caractères dans la chaîne de date / heure est.
EXEMPLE DATE / HEURE: 20160917120013.8101685040
la source