comando ad albero per più include ed esclude


33

Potresti darmi un esempio di come usare il comando tree per filtrare il risultato come segue:

  • ignorare le directory (diciamo bin, unitTest)
  • solo messa in vendita di determinati file con estensioni (ad esempio .cpp, .c, .hpp, .h)
  • fornendo nomi di percorso completi solo dei file risultanti corrispondenti ai criteri.

Risposte:


54

Un modo è usare i pattern con gli switch -Ie -P:

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

La -fstampa il percorso completo per ogni file, e -Iesclude i file nel modello qui separati da una barra verticale. L' -Popzione include solo i file elencati nel modello che corrispondono a una determinata estensione.


6
Nota: non includere le barre finali nel flag -I, ad esempio -I binno -I bin/.
ThorSummoner

questo fa un erroresed: illegal option -- I
François Romain,

4

uso finde treecomando che è use find's pruneper escludere le directory di ricerca e usare tree -Pper la ricerca del pattern.

Utilizzare l'opzione di eliminazione, ad esempio se si desidera escludere la miscdirectory è sufficiente aggiungere a -path ./misc -prune -oal comando find.

per es. find . -path ./misc -prune -o -exec tree -P <pattern> {} \;oppure puoi usare-name "*.cpp" in find

per escludere l'uso di più directory

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


Per me, l'esempio con find fornisce l'errore "find: prevede un'espressione dopo '-o'"
WebComer

hai provato solo find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -oofind . -path ./misc -prune -o -exec tree -P *.cpp {} \;
harish.venkat il

2

La vera soluzione è produrre percorsi completi, filtrare i percorsi indesiderati e infine correggere gli output.

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

Se tutti i file sono necessari nell'output, rimuovere il parametro "d".

Una spiegazione dettagliata è disponibile all'indirizzo: http://qaon.net/press/archives/572 se si capisce il giapponese.


-f flag super utile!
Michael Dimmitt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.