Réponses:
Il n'y a rien de intégré à trouver, même GNU find. Vous pouvez post-traiter la sortie de find
pour trier par nombre de barres obliques, par exemple avec Perl:
find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
<>
est la liste de toutes les lignes d'entrée;$a =~ s!/!/!g
est le nombre de barres obliques $a
, que nous utilisons comme critère de tri.Si vous pouvez utiliser zsh:
echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
**/*
répertorie tous les fichiers du répertoire et des sous-répertoires actuels.oe
contrôle l'ordre dans lequel les correspondances sont retournées: elles sont triées par la valeur REPLY
après avoir exécuté le code ici entre guillemets pour chaque correspondance avec REPLY
initialement défini sur le chemin correspondant.$REPLY
pour tout supprimer sauf les barres obliques. Donc, le résultat se compose de tout à la profondeur 1 (résultat vide $REPLY
), puis de tout à la profondeur 2 ( $REPLY
finit par l'être /
), la profondeur 3 ( //
), etc.Nan
Allez à cette question sur SO pour des solutions de contournement.
Mon sentiment est que vous le pouvez. Cela implique grep et autres et une boucle, mais je trouve que cela fonctionne très bien, en particulier pour votre cas concernant la recherche n'ayant pas besoin d'être terminée.
Il consomme plus de ressources en raison de:
C'est bien parce que:
#! / bin / bash profondeur = 0 tout en trouvant -mindepth $ depth -maxdepth $ depth | grep '.' faire profondeur = $ ((profondeur + 1)) terminé
Vous pouvez également l'ajuster sur une seule ligne assez (?) Facilement:
depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done
Mais je préfère les petits scripts à la frappe ...