Mam problem z wyszukiwaniem z /var
powodu zawieszenia /var/run
. Próbowałem wykluczyć/var/run
, ale nie przyniosło to oczekiwanych rezultatów:
$ 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
Próbowałem obu -exclude-dir=/var/run
i -exclude-dir="/var/run"
. Oba dają takie same wyniki.
Dlaczego mój grep zawodzi?
Jak wykluczyć /var/run
z rekurencyjnego grepa?
CentOS 7.2 z Grep:
$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.
--exclude-dir=/var/run
bez cytatów?grep
proces nie widzi cytatów w obu przypadkach. Bash rozszerza je i nie trzeba ich zastępować, więc są po prostu usuwane. Dotyczy to wszystkich znanych mi pocisków.Odpowiedzi:
Myślę, że to prawdopodobnie dlatego, że wyraźnie prosisz
grep
o wyszukiwanie rekurencyjne/var
i/var/run
nie pasuje do SUBDIRECTORY poniżej/var
.Zobacz stronę man grep, która stwierdza:
NAPRAWIĆ
Dlatego, aby naprawić polecenie, zmień wzór wykluczania, tj .:
źródło
grep -r --exclude-dir=./root/js sometext .
aby wykluczyć podfolder z bieżącej lokalizacji?/
czy coś robią. grep przechodzi do każdego folderu i rozpoczyna wyszukiwanie w tym momencie. Skutecznie zawsze przeszukuje bieżący folder. Jeśli chcesz wykluczyć podfolder (np./home/me/dev/project1/js
) I szukasz z wielu folderów w górę (np. Zaczynając od/home/me
), musisz określić nazwę jednego folderu podstawowego, który chcesz wykluczyć (np--exclude-dir=js
.). Niestety wyklucza to również KAŻDY podfolder o tej samej nazwie, w innym miejscu w hierarchii. Jeśli chcesz czegoś z większą kontrolą, możesz spróbować użyćfind
zgrep
.