Ich habe Probleme beim Suchen /var
wegen eines hängen an /var/run
. Ich versuchte zu ausschließen /var/run
, aber es führt nicht zu erwarteten Ergebnissen:
$ 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
Ich habe beide probiert -exclude-dir=/var/run
und -exclude-dir="/var/run"
. Beide produzieren die gleichen Ergebnisse.
Warum versagt mein Grep?
Wie schließe ich aus? /var/run
von einem rekursiven Grep?
CentOS 7.2 mit Grep:
$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.
--exclude-dir=/var/run
ohne die Anführungszeichen?grep
In beiden Fällen werden die Anführungszeichen nicht angezeigt. Bash erweitert sie, und es muss kein Ersatz durchgeführt werden, sodass sie einfach entfernt werden. Dies ist der Fall für alle Muscheln, die ich kenne.Antworten:
Ich denke es liegt wahrscheinlich daran, dass Sie explizit fragen
grep
rekursiv suchen von/var
, und/var/run
stimmt nicht mit einem SUBDIRECTORY unter überein/var
.Siehe grep man page, die besagt:
FIX
Um Ihren Befehl zu korrigieren, ändern Sie daher das Ausschlussmuster, d. H .:
quelle
grep -r --exclude-dir=./root/js sometext .
kann ich einen Unterordner vom aktuellen Speicherort ausschließen?/
Ich mache alles. grep geht in jeden Ordner und beginnt an dieser Stelle mit der Suche. Es wird effektiv immer der aktuelle Ordner durchsucht. Wenn Sie einen Unterordner ausschließen möchten (z./home/me/dev/project1/js
) und Sie suchen aus vielen Ordnern (z. B. ab/home/me
), müssen Sie den Namen des Basisordners angeben, den Sie ausschließen möchten (z.--exclude-dir=js
). Leider schließt dies auch ANY-Unterordner mit demselben Namen an anderer Stelle in der Hierarchie aus. Wenn Sie etwas mehr Kontrolle haben möchten, können Sie versuchen, mit zu suchenfind
mitgrep
.