Estou tendo problemas para pesquisar /var
devido 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/run
e -exclude-dir="/var/run"
. Ambos produzem os mesmos resultados.
Por que meu grep está falhando?
Como excluo /var/run
de um grep recursivo?
CentOS 7.2, com Grep:
$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.
--exclude-dir=/var/run
sem as aspas?grep
processo 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.Respostas:
Eu acho que é provavelmente porque você está explicitamente pedindo
grep
para pesquisar recursivamente/var
e/var/run
não corresponde a um SUBDIRECTÓRIO abaixo/var
.Veja a página de manual grep, que afirma:
CONSERTAR
Portanto, para corrigir seu comando, altere o padrão de exclusão, ou seja:
fonte
grep -r --exclude-dir=./root/js sometext .
para excluir uma subpasta do local atual?/
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 usarfind
comgrep
.