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.