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

Jawaban:


25
find . -type d -not \( -name .svn -prune \)

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'

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*'

1
Melewatkan kutipan penutup. Ada kemungkinan di luar bahwa wildcard mungkin terlalu serakah.
Dan Carley

2

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


2

Anda bisa menggunakan:

find . -type d -not -wholename '*.svn*' 

itu dilucuti * dari depan jawaban ... harus ditemukan. -type d -tidak -wholename ' /.svn/ ' (itu adalah wholename squote asterisk slash dot svn slash asterisk squote)
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.