commande d'arborescence pour plusieurs inclut et exclut

33

Pourriez-vous s'il vous plaît me donner un exemple d'utilisation de la commande d'arbre pour filtrer les résultats comme suit:

  • d'ignorer les répertoires ( par exemple bin, unitTest)
  • que la liste de certains fichiers ayant des extensions ( par exemple .cpp, .c, .hpp, .h)
  • fournir les noms de chemin complets des seuls fichiers résultants correspondant aux critères.
Linda
la source

Réponses:

54

Une façon consiste à utiliser des modèles avec les commutateurs -Iet -P:

tree -f -I "bin|unitTest" -P "*.[ch]|*.[ch]pp." your_dir/

Le -fimprime le chemin complet de chaque fichier et -Iexclut les fichiers du modèle ici séparés par une barre verticale. Le -Pcommutateur inclut uniquement les fichiers répertoriés dans le modèle correspondant à une certaine extension.


la source
6
Remarque: n'incluez pas de barres obliques de fin dans votre indicateur -I, par exemple -I binnon -I bin/.
ThorSummoner
cela fait une erreursed: illegal option -- I
François Romain
4

utiliser findet treecommander utiliser find prunepour exclure les répertoires de recherche et utiliser tree -Ppour rechercher le modèle.

Utilisez le commutateur prune, par exemple si vous souhaitez exclure le miscrépertoire, ajoutez simplement a -path ./misc -prune -oà votre commande find.

par exemple. find . -path ./misc -prune -o -exec tree -P <pattern> {} \;ou vous pouvez utiliser-name "*.cpp" in find

pour exclure l'utilisation de plusieurs répertoires

find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o

harish.venkat
la source
Pour moi, l'exemple avec find donne l'erreur "find: une expression attendue après '-o'"
WebComer
avez-vous essayé juste find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -ooufind . -path ./misc -prune -o -exec tree -P *.cpp {} \;
harish.venkat
2

La vraie solution consiste à sortir des chemins complets, à filtrer les chemins indésirables et enfin à corriger les sorties.

tree -df | egrep -v "\./(bin|unitTest)/.*" | sed -r 's%\./.*/%%g'

Si tous les fichiers sont nécessaires dans la sortie, supprimez le paramètre "d".

Des explications détaillées peuvent être trouvées sur: http://qaon.net/press/archives/572 si vous pouvez comprendre le japonais.

Afante
la source
-f flag super utile!
Michael Dimmitt