Grep non onora --exclude-dir


12

Ho problemi a cercare a /varcausa di un blocco a /var/run. Ho cercato di escludere/var/run , ma non sta producendo i risultati previsti:

$ 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

Ho provato entrambi -exclude-dir=/var/rune -exclude-dir="/var/run". Entrambi producono gli stessi risultati.

Perché il mio grep sta fallendo?

Come escludo /var/runda un grep ricorsivo?


CentOS 7.2, con Grep:

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

1
Hai provato con solo --exclude-dir=/var/runsenza le virgolette?
Jake Gould

@JakeGould - sì; sia con che senza. Consentitemi di aggiungere questo alla domanda.
JWW

@JakeGould Non fa differenza: il grepprocesso non vede le virgolette in entrambi i casi. Bash li espande e non vi è alcuna sostituzione da eseguire, quindi vengono semplicemente rimossi. Questo è il caso di tutte le shell che conosco.
wchargin,

Risposte:


18

Penso che sia probabilmente perché stai esplicitamente chiedendo grepdi cercare ricorsivamente da /var, e /var/runnon corrisponde a un SUBDIRECTORY sotto /var.

Vedi la pagina man di grep, che afferma:

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

FIX

Pertanto, per correggere il comando, modifica il modello exclude, ovvero:

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

Ho una domanda simile a questa. Come cambieresti grep -r --exclude-dir=./root/js sometext .per escludere una sottocartella dalla posizione corrente?
psynnott,

3
Non sono sicuro /che facciano qualcosa. grep va in ogni cartella e inizia la ricerca in quel punto. Effettivamente cerca sempre la cartella corrente. Se si desidera escludere una sottocartella (ad es. /home/me/dev/project1/js) E si esegue la ricerca da molte cartelle (ad es. A partire da /home/me), è necessario specificare il nome di una cartella di base che si desidera escludere (ad es --exclude-dir=js.). Sfortunatamente, questo escluderà anche QUALSIASI sottocartella con lo stesso nome, altrove nella gerarchia. Se vuoi qualcosa con un maggiore controllo, puoi provare a guardare findcon grep.
jehad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.