GNU/Linux >> Belajar Linux >  >> Linux

Cara mengecualikan direktori di find . memerintah

Jika -prune tidak bekerja untuk Anda, ini akan:

find -name "*.js" -not -path "./directory/*"

Peringatan: membutuhkan melintasi semua direktori yang tidak diinginkan.


Gunakan -prune utama. Misalnya, jika Anda ingin mengecualikan ./misc :

find . -path ./misc -prune -o -name '*.txt' -print

Untuk mengecualikan beberapa direktori, ATAU di antara tanda kurung.

find . -type d \( -path ./dir1 -o -path ./dir2 -o -path ./dir3 \) -prune -o -name '*.txt' -print

Dan, untuk mengecualikan direktori dengan nama tertentu di tingkat mana pun, gunakan -name primer bukan -path .

find . -type d -name node_modules -prune -o -name '*.json' -print

Saya menemukan yang berikut ini lebih mudah untuk dipikirkan daripada solusi lain yang diusulkan:

find build -not \( -path build/external -prune \) -name \*.js
# you can also exclude multiple paths
find build -not \( -path build/external -prune \) -not \( -path build/blog -prune \) -name \*.js

Catatan Penting: jalur yang Anda ketikkan setelah -path harus sama persis dengan apa find akan mencetak tanpa pengecualian. Jika kalimat ini membingungkan Anda, pastikan untuk menggunakan jalur lengkap di seluruh keseluruhan perintah seperti ini:find /full/path/ -not \( -path /full/path/exclude/this -prune \) ... . Lihat catatan [1] jika Anda menginginkan pemahaman yang lebih baik.

Di dalam \( dan \) adalah ekspresi yang akan cocok persis build/external (lihat catatan penting di atas), dan jika berhasil, hindari melintasi apa pun di bawah . Ini kemudian dikelompokkan sebagai ekspresi tunggal dengan tanda kurung yang lolos, dan diawali dengan -not yang akan membuat find lewati apa pun yang cocok dengan ekspresi itu.

Orang mungkin bertanya apakah menambahkan -not tidak akan membuat semua file lain disembunyikan oleh -prune muncul kembali, dan jawabannya adalah tidak. Caranya -prune berfungsi adalah apa pun yang, setelah tercapai, file di bawah direktori itu akan diabaikan secara permanen.

Ini berasal dari kasus penggunaan yang sebenarnya, di mana saya perlu memanggil yui-compressor pada beberapa file yang dibuat oleh wintersmith, tetapi tinggalkan file lain yang perlu dikirim apa adanya.

Catatan [1] :Jika Anda ingin mengecualikan /tmp/foo/bar dan Anda menjalankan find seperti ini "find /tmp \(... " maka Anda harus menentukan -path /tmp/foo/bar . Sebaliknya, jika Anda menjalankan find seperti ini cd /tmp; find . \(... maka Anda harus menentukan -path ./foo/bar .


Linux
  1. Cara Menemukan Jumlah File dalam Direktori dan Subdirektori

  2. [Linux] :Cara mengecualikan direktori saat menggunakan perintah shell "tar"

  3. Kecualikan Direktori Di Temukan?

  1. Temukan Kecualikan Direktori?

  2. Shell - Bagaimana menemukan direktori dari beberapa perintah?

  3. Bagaimana cara membuat find mengecualikan folder yang dicarinya?

  1. Bagaimana Mengintegrasikan Perintah Mv Setelah Menemukan Perintah?

  2. Bagaimana cara menggunakan perintah 'cp' untuk mengecualikan direktori tertentu?

  3. Bagaimana saya bisa mengecualikan direktori dari perintah ls