Réponses:
Il n'y a rien de intégré à trouver, même GNU find. Vous pouvez post-traiter la sortie de findpour 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!/!/!gest 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.oecontrôle l'ordre dans lequel les correspondances sont retournées: elles sont triées par la valeur REPLYaprès avoir exécuté le code ici entre guillemets pour chaque correspondance avec REPLYinitialement défini sur le chemin correspondant.$REPLYpour 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 ( $REPLYfinit 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 ...