perintah tree untuk multiple termasuk dan tidak termasuk

33

Bisakah Anda memberi saya contoh menggunakan perintah pohon untuk menyaring hasil sebagai berikut:

  • untuk mengabaikan direktori (katakanlah bin, unitTest)
  • hanya daftar file tertentu memiliki ekstensi (misalnya .cpp, .c, .hpp, .h)
  • memberikan nama path lengkap hanya file yang dihasilkan yang cocok dengan kriteria.
Linda
sumber

Jawaban:

54

Salah satu caranya adalah menggunakan pola dengan -Idan -Psakelar:

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

The -fmencetak path lengkap untuk setiap file, dan -Itidak termasuk file dalam pola disini dipisahkan oleh sebuah bar vertikal. The -Pinlcudes saklar hanya file tercantum dalam pencocokan pola ekstensi tertentu.


sumber
6
Catatan: jangan menyertakan trailing slash di flag -I Anda, misal -I bintidak -I bin/.
ThorSummoner
ini membuat kesalahansed: illegal option -- I
François Romain
4

gunakan finddan treeperintah yang digunakan find's pruneuntuk mengecualikan direktori pencarian dan digunakan tree -Puntuk mencari pola.

Gunakan prune switch, misalnya jika Anda ingin mengecualikan miscdirektori, tambahkan saja -path ./misc -prune -oke perintah find Anda.

untuk misalnya. find . -path ./misc -prune -o -exec tree -P <pattern> {} \;atau bisa kamu gunakan-name "*.cpp" in find

untuk mengecualikan penggunaan beberapa direktori

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

harish.venkat
sumber
Bagi saya, contoh dengan find memberikan kesalahan "find: expected an expression after '-o'"
WebComer
apakah Anda mencoba find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -oataufind . -path ./misc -prune -o -exec tree -P *.cpp {} \;
harish.venkat
2

Solusi sebenarnya adalah untuk mengeluarkan path lengkap, memfilter path yang tidak diinginkan, dan akhirnya memperbaiki output.

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

Jika semua file diperlukan dalam output, hapus parameter "d".

Penjelasan terperinci dapat ditemukan di: http://qaon.net/press/archives/572 jika Anda dapat memahami bahasa Jepang.

Afante
sumber
bendera -f super berguna!
Michael Dimmitt