Grep nie honoruje --exclude-reż


12

Mam problem z wyszukiwaniem z /varpowodu 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/runi -exclude-dir="/var/run". Oba dają takie same wyniki.

Dlaczego mój grep zawodzi?

Jak wykluczyć /var/runz rekurencyjnego grepa?


CentOS 7.2 z Grep:

$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.

1
Czy próbowałeś tego --exclude-dir=/var/runbez cytatów?
JakeGould

@JakeGould - tak; zarówno z jak i bez. Pozwól, że dodam to do pytania.
jww

@JakeGould Nie ma znaczenia: grepproces 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.
wchargin

Odpowiedzi:


18

Myślę, że to prawdopodobnie dlatego, że wyraźnie prosisz grepo wyszukiwanie rekurencyjne /vari /var/runnie pasuje do SUBDIRECTORY poniżej /var.

Zobacz stronę man grep, która stwierdza:

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

NAPRAWIĆ

Dlatego, aby naprawić polecenie, zmień wzór wykluczania, tj .:

sudo grep -IR --exclude-dir="run" '45.78.157.165' /var | egrep -v '(audit|access)'

Mam podobne pytanie do tego. Jak zmieniłbyś się, grep -r --exclude-dir=./root/js sometext .aby wykluczyć podfolder z bieżącej lokalizacji?
psynnott,

3
Nie jestem pewien, /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ć findz grep.
jead
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.