Bagaimana cara menemukan (atau mengecualikan) semua direktori dan sub-direktori yang cocok dengan pola tertentu (di Linux)?

17

Saya mencoba menggunakan perintah Linux find untuk menemukan semua direktori dan sub-direktori yang tidak memiliki .svn (Subversion hidden folder) di jalurnya. Saya hanya bisa mendapatkannya untuk mengecualikan direktori .svn yang sebenarnya sendiri, tetapi tidak salah satu dari sub-direktori.

Inilah yang sedang saya lakukan sekarang:

find . -type d \! -iname '*.svn*'

Saya juga sudah mencoba:

find . -type d \! iname '.svn' \! iname '.svn/*'

Hanya FYI, saya mencoba menggunakan pola find sehingga saya bisa menerapkan beberapa properti subversi ke semua direktori di repositori saya, tidak termasuk folder tersembunyi subversi dan sub-direktori mereka (dengan menerapkan perintah exec ke direktori yang dikembalikan dari perintah find. ) ..

TIA

Jason Down
sumber

Jawaban:

25
find . -type d -not \( -name .svn -prune \)
Dan Carley
sumber
Saya akan memilih yang ini, meskipun mereka semua tampaknya berhasil.
Jason Down
Saya telah menggunakan -proune on find sebelumnya, tapi saya belum melihat trik \ (... \) itu. Terima kasih.
Rory
Bisakah Anda tahu bagaimana ini akan bekerja di aplikasi node.js / express di mana saya ingin mengecualikan node-modul dari menghitung garis? Saya mencoba find . -name '*.js' -not \( -name 'node_modules' -prune \) | xargs wc -l tanpa keberhasilan ...
merobek
Menanggapi @shredding terkait aplikasi Node.js / Express dan mengecualikan direktori node_modules dari hasil find, ini berfungsi untuk saya: find. -nama ' .test.js ' -not (-wholename '* node_modules ') ... mengingat bahwa tes yang ingin saya jalankan diakhiri dengan ".test.js"
mysterlune
Apakah ini akan berhasil tanpa -type d? Saya suka mencari semua file tetapi mengecualikan direktori ".git" secara rekursif
James Mitch
6

Bagaimana dengan sederhana

find . -type d |  grep -v '.svn'
wazoox
sumber
Kehilangan kemampuan Anda untuk menggunakan tindakan menemukan apa pun.
David Pashley
Ya, tapi bagaimana dengan lingkaran sh kecil yang bagus? :) untuk FILE di find . -type d | grep -v '.svn'; lakukan gema apapun; selesai
wazoox
6

Bagaimana dengan -pathopsi untuk menemukan?

find . -type d ! -path '*.svn*'
Rory
sumber
1
Melewatkan kutipan penutup. Ada kemungkinan di luar bahwa wildcard mungkin terlalu serakah.
Dan Carley
2

Temukan . -path './tmp' -prune -o .......


sumber
2

Anda bisa menggunakan:

find . -type d -not -wholename '*.svn*' 
idbrii
sumber
itu dilucuti * dari depan jawaban ... harus ditemukan. -type d -tidak -wholename ' /.svn/ ' (itu adalah wholename squote asterisk slash dot svn slash asterisk squote)