Comment faire pour trier les résultats de recherche (y compris les répertoires imbriqués) par ordre alphabétique dans bash
J'ai une liste de répertoires sur la base des résultats de l'exécution de la commande "find" dans bash. Par exemple, le résultat de trouver les fichiers:
test/a/file
test/b/file
test/file
test/z/file
Je veux trier la sortie de sorte qu'il apparaît que:
test/file
test/a/file
test/b/file
test/z/file
Est-il possible de trier les résultats au sein de la commande, ou en transférant les résultats en sorte?
OriginalL'auteur Ken | 2013-01-23
Vous devez vous connecter pour publier un commentaire.
Si vous avez la version GNU de trouver, essayez ceci:
À l'utilisation de ces noms de fichier dans une boucle, faire
La commande rechercher imprime trois choses pour chaque fichier: (1) de son répertoire, (2) sa profondeur dans l'arborescence de répertoires, et (3) son nom complet. En incluant la profondeur dans les données de sortie que nous pouvons utiliser
sort -n
pour triertest/file
ci-dessustest/a/file
. Enfin, nous utilisonsawk
à dépouiller les deux premières colonnes, puisqu'ils n'ont été utilisés pour le tri.À l'aide de
\0
comme un séparateur entre les trois domaines nous permet de gérer les noms de fichiers avec des espaces et des tabulations dans entre eux (mais pas les retours à la ligne, malheureusement).Si vous ne parvenez pas à modifier le
find
de la commande, puis essayez ce alambiqué de remplacement:Il fait la même chose, avec
${file%/*}
être utilisé pour obtenir un fichier du nom de répertoire et l'tr
de commande utilisé pour compter le nombre de barres obliques, ce qui est équivalent à un fichier de "profondeur".(Bien sûr, j'espère qu'il y a un plus facile de répondre. Ce que vous demandez ne semble pas si difficile, mais je suis d'obturation sur une solution simple.)
Voir mon edit.
find ... | while read file
doit être préférée à l'for file in $(find ...)
. Ce dernier n'est pas blanc, coffre-fort, est plus lente, et peut d'erreur si il y a trop de noms de fichier pour l'adapter à la ligne de commande.OriginalL'auteur John Kugelman
de l'essayer. pour référence, les premières sortes sur le deuxième champ second char. qui n'existe que sur le fichier, et a une r pour inverser le sens qu'il est le premier, après qu'il sorte sur le premier caractère de la deuxième champ. [-t est le champ séparateur, -k est la clé]
faire un
info sort
pour plus d'info. il ya une tonne de façons différentes d'utiliser l'option-t et -k ensemble pour obtenir des résultats différents.OriginalL'auteur WhyteWolf