Grep no honra --exclude-dir

12

Tengo problemas para buscar /vardebido a un bloqueo /var/run. Traté de excluir/var/run , pero no produce los resultados esperados:

$ 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

He intentado ambos -exclude-dir=/var/runy -exclude-dir="/var/run". Ambos producen los mismos resultados.

¿Por qué falla mi grep?

¿Cómo excluyo /var/runde un grep recursivo?


CentOS 7.2, con Grep:

$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.
jww
fuente
1
¿Lo probaste solo --exclude-dir=/var/runsin las comillas?
JakeGould
@JakeGould - sí; ambos con y sin Déjame agregar eso a la pregunta.
jww
@JakeGould No hay diferencia: el grepproceso no ve las citas en ninguno de los casos. Bash los expande y no hay sustitución que realizar, por lo que simplemente se eliminan. Este es el caso de todos los proyectiles que conozco.
wchargin

Respuestas:

18

Creo que probablemente se deba a que está pidiendo explícitamente grepbuscar de forma recursiva /vary /var/runno coincide con un SUBDIRECTORIO debajo /var.

Consulte la página de manual de grep, que dice:

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

REPARAR

Por lo tanto, para corregir su comando, cambie el patrón de exclusión, es decir:

sudo grep -IR --exclude-dir="run" '45.78.157.165' /var | egrep -v '(audit|access)'
yihad
fuente
Tengo una pregunta similar a esto. ¿Cómo cambiaría grep -r --exclude-dir=./root/js sometext .para excluir una subcarpeta de la ubicación actual?
psynnott el
3
No estoy seguro de que /hagan nada. grep entra en cada carpeta y comienza la búsqueda en ese punto. Efectivamente, siempre está buscando en la carpeta actual. Si desea excluir una subcarpeta (p /home/me/dev/project1/js. Ej. ) Y está buscando desde muchas carpetas hacia arriba (p. Ej., Comenzando en /home/me), debe especificar el nombre de la carpeta base que desea excluir (p --exclude-dir=js. Ej .). Desafortunadamente, esto también excluirá CUALQUIER subcarpeta del mismo nombre, en otra parte de la jerarquía. Si quieres algo con más control, puedes intentar usarlo findcon grep.
jehad