Catatan: Ini BUKAN duplikat. Saya berurusan dengan contoh tertentu di mana opsi grep untuk mengecualikan jalur / direktori tidak berlaku dengan cara yang diharapkan.
Saya mencoba menggunakan grep untuk secara rekursif mencari sistem file root saya. Saya mencoba untuk mengecualikan direktori tertentu seperti /proc
, /sys
, dan /usr/local
. Jika saya gunakan --exclude-dir=${DIR_NAME}
, maka itu tidak akan mencari di jalur di bawah ${DIR_NAME}
, tetapi ini juga berarti bahwa itu akan menolak untuk mencari jalur di bawah ${DIR_NAME}
jika ${DIR_NAME}
berada pada level di bawah direktori kerja saat ini. Sebagai contoh, pertimbangkan pohon sistem file ini:
${PWD}/
data/
settings/
sys/
users/
developer/
projects/
my_os/
build/
src/
apps/
sys/
Makefile
extras/
sys/
apps/
os/
Jika saya ingin pencarian saya dikecualikan ${PWD}/sys
dan semua yang ada di dalamnya, grep -rl --exclude-dir=sys
akan mengecualikannya, tetapi itu juga akan mengecualikan ${PWD}/data/settings/sys
dan ${PWD}/users/developer/projects/my_os/src/sys
, dua direktori saya ingin dimasukkan dalam pencarian saya.
Saya awalnya berharap bahwa --exclude-dir
/ --exclude
akan memungkinkan untuk ekspresi reguler dan saya telah menemukan komentar ini menunjukkan bahwa mereka melakukannya, tetapi tampaknya sintaks ekspresi reguler tidak mempengaruhi perilaku utilitas (misalnya, "^/(dev|proc)"
). Saya baik-baik saja jika kedua opsi tersebut tidak menggunakan ekspresi reguler, tetapi saya tidak ingin pola pengecualian diterapkan ke komponen jalur tunggal. Apakah ada cara untuk membuatnya bekerja seperti itu?
Jawaban:
Cukup gunakan ini:
Anda dapat menambahkan begitu banyak "| grep -i -v ^ dir /" sesuai kebutuhan.
sumber
/dev/random
dan/dev/zero
, itu akan menggantung selamanya. (Dan juga mencetak aliran pesan kesalahan.)