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.

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)'

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.