temukan direktori kecualikan

13

Saya di Linux (Ubuntu) dan saya ingin mengecualikan direktori tertentu (seperti .hg) ketika saya melakukan

find | less  

Saya mencoba yang berikut untuk mengecualikan direktori .hg dari daftar, tetapi sepertinya tidak berfungsi.

find -type d \( ! -iname \.hg \)
find -type d \( ! -name \.hg \)
find -type d \( ! -iname .hg \)

Bagaimana cara mengecualikan .directorydalam perintah find

Senthil Kumaran
sumber

Jawaban:

14

Pada penelitian untuk findsolusi serupa saya menemukan penjelasan bermanfaat tentang Bagaimana cara menggunakan opsi '-prune' dari 'find' di sh? oleh Laurence Gonsalves .

Anda dapat menggunakan sesuatu seperti:

find . \( -type d -name .hg -prune \) -o \( -type f -name "foo" -print \)

atau (tanpa nama)

find . \( -type d -name .hg -prune \) -o \( -type f -print \)

The (lolos) tanda kurung \(dan \)kelompok tes ( typedan name) dan tindakan yang sesuai ( prunedan print, masing-masing) bersama-sama kiri dan kanan OR ( -o).

Karena -omemiliki prioritas lebih rendah daripada penjajaran, Anda dapat menghilangkan tanda kurung jika Anda suka. Banyak findimplementasi juga memungkinkan Anda melewati final -print.

find . -type d -name .hg -prune -o -type f -name "foo" -print
fheub
sumber
1
Saya akan menulis solusi saya, tetapi tampaknya persis seperti ini. Secara pribadi saya akan meletakkan bagian -prunedalam set kurung pertama, dan -type f -printdi set kedua, hanya untuk membuat dan / atau operasi lebih jelas, tetapi sebaliknya ini terlihat tepat bagi saya.
me_and
Saya memperbaiki tanda kurung (dan alasannya) berkat komentar @me_and.
fheub
2

Lihatlah ack: http://betterthangrep.com/

Selain memiliki seperangkat folder pengecualian standar yang masuk akal (.hg misalnya, pengecualian default), mudah untuk mengecualikan folder baru:

ack --ignore-dir=.directory search_term

Untuk mengembalikan ini ke kasus penggunaan Anda di mana Anda mencari daftar file, Anda akan menggunakan -fopsi, seperti pada:

ack -f --ignore-dir=.directory

Saya beralih dari penulisan perintah pencarian / temukan berbelit-belit ke perintah ack sederhana.

Tip: Masukkan opsi baris perintah yang umum digunakan (misalnya folder yang dikecualikan) ke file .ackrc.

Brian Leathem
sumber
Berdasarkan pada find | lesspertanyaan, OP sedang mencari daftar file sederhana. Bagaimana ini membantu?
CVn
@ MichaelKjörling Seperti yang saya nyatakan dalam jawaban saya, opsi -f menyediakan daftar file.
Brian Leathem
-2

Anda dapat mencoba

find \( ! -regex '.*/\.directory\(\|/.*\)' \)
yuyichao
sumber
Sangat yakin ini tidak seperti yang diminta OP.
me_and
Saya hanya berpikir inilah yang dia maksud dengan.directory
yuyichao