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.

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.


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


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.


bendera -f super berguna!
Michael Dimmitt
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.