Grep onurlandırmıyor --exclude-dir


12

/varBir askıda kalma nedeniyle arama konusunda sorun yaşıyorum /var/run. Hariç tutmaya/var/run çalıştım , ancak beklenen sonuçları üretmiyor:

$ sudo grep -IR --exclude-dir="/var/run" '45.78.157.165' /var | egrep -v '(audit|access)'
/var/log/secure:Jun 21 14:08:34 cryptopp sshd[19729]: error: Received disconnect from 199.91.135.157: 3: com.jcraft.jsch.JSchException: reject HostKey: 45.78.157.165 [preauth]
/var/log/secure-20160626:Jun 21 14:08:34 cryptopp sshd[19729]: error: Received disconnect from 199.91.135.157: 3: com.jcraft.jsch.JSchException: reject HostKey: 45.78.157.165 [preauth]
/var/log/secure-20160626:Jun 21 14:08:34 cryptopp sshd[19729]: error: Received disconnect from 199.91.135.157: 3: com.jcraft.jsch.JSchException: reject HostKey: 45.78.157.165 [preauth]
grep: /var/run/saslauthd/mux: No such device or address
grep: /var/run/dbus/system_bus_socket: No such device or address
grep: /var/run/rpcbind.sock: No such device or address
grep: /var/run/udev/control: No such device or address

İkisini de denedim -exclude-dir=/var/runve -exclude-dir="/var/run". Her ikisi de aynı sonuçları verir.

Grep'im neden başarısız oluyor?

/var/runYinelemeli bir grepten nasıl hariç tutabilirim ?


CentOS 7.2, Grep ile:

$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.

1
Sadece --exclude-dir=/var/runtırnak işaretleri olmadan denedin mi?
JakeGould

@JakeGould - evet; hem olan hem de olmayan. Bunu soruya ekleyeyim.
jww

@JakeGould Fark grepetmez : süreç her iki durumda da tırnak işaretlerini görmez. Bash onları genişletir ve gerçekleştirilecek bir ikame yoktur, bu yüzden basitçe çıkarılırlar. Bildiğim tüm mermiler için durum böyle.
wchargin

Yanıtlar:


18

Bence bunun nedeni büyük olasılıkla açıkça grepözyinelemeli arama yapmak istiyor /varve /var/runaltında bir SUBDIRECTORY eşleşmiyor /var.

Grep man sayfasına bakınız:

--exclude-dir=glob
    [..] skip any subdirectory whose base name matches glob.  [..]

FIX

Bu nedenle, komutunuzu düzeltmek için hariç tutma düzenini değiştirin, yani:

sudo grep -IR --exclude-dir="run" '45.78.157.165' /var | egrep -v '(audit|access)'

Buna benzer bir sorum var. grep -r --exclude-dir=./root/js sometext .Bir alt klasörü geçerli konumdan hariç tutmak için nasıl değişiklik yaparsınız ?
psynnott

3
Emin değilim /s bir şey yapmak. grep her bir klasöre girer ve o noktada aramayı başlatır. Her zaman geçerli klasörü arar. Bir alt klasörü (örn. /home/me/dev/project1/js) Hariç tutmak istiyorsanız ve birçok klasörden (ör. Başlangıçta /home/me) arama yapıyorsanız , hariç tutmak istediğiniz bir temel klasör adını belirtmeniz gerekir (örn. --exclude-dir=js). Ne yazık ki, bu aynı hiyerarşinin başka bir yerinde aynı addaki HERHANGİ bir alt klasörü hariç tutacaktır. Daha kontrollü bir şey istiyorum, kullandığınız bakmaya deneyebilirsiniz findile grep.
jehad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.