O Grep não respeita --exclude-dir

12

Estou tendo problemas para pesquisar /vardevido a um problema /var/run. Tentei excluir/var/run , mas não está produzindo 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

Eu tentei ambos -exclude-dir=/var/rune -exclude-dir="/var/run". Ambos produzem os mesmos resultados.

Por que meu grep está falhando?

Como excluo /var/runde um grep recursivo?


CentOS 7.2, com Grep:

$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.
jww
fonte
1
Você tentou com apenas --exclude-dir=/var/runsem as aspas?
precisa saber é o seguinte
@JakeGould - sim; com e sem. Deixe-me acrescentar isso à pergunta.
JWW
@JakeGould Não faz diferença: o grepprocesso não vê as aspas nos dois casos. O Bash os expande e não há substituição a ser executada; portanto, eles são simplesmente removidos. Este é o caso de todas as conchas que eu conheço.
precisa saber é o seguinte

Respostas:

18

Eu acho que é provavelmente porque você está explicitamente pedindo greppara pesquisar recursivamente /vare /var/runnão corresponde a um SUBDIRECTÓRIO abaixo /var.

Veja a página de manual grep, que afirma:

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

CONSERTAR

Portanto, para corrigir seu comando, altere o padrão de exclusão, ou seja:

sudo grep -IR --exclude-dir="run" '45.78.157.165' /var | egrep -v '(audit|access)'
jehad
fonte
Eu tenho uma pergunta semelhante a isso. Como você mudaria grep -r --exclude-dir=./root/js sometext .para excluir uma subpasta do local atual?
Psgnnott
3
Não tenho certeza se eles /fazem alguma coisa. O grep entra em cada pasta e inicia a pesquisa nesse ponto. É efetivamente sempre pesquisando a pasta atual. Se você deseja excluir uma subpasta (por exemplo /home/me/dev/project1/js) e estiver pesquisando em várias pastas (por exemplo, começando em /home/me), precisará especificar o nome da pasta base que deseja excluir (por exemplo --exclude-dir=js). Infelizmente, isso também excluirá QUALQUER subpasta com o mesmo nome, em outras partes da hierarquia. Se você quiser algo com mais controle, você pode tentar olhar para usar findcom grep.
jehad 5/07