Греп не вшановує - exclude-dir


12

У мене виникають проблеми з пошуком /varчерез зависання /var/run. Я намагався виключити/var/run , але це не дало очікуваних результатів:

$ 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

Я спробував і те, -exclude-dir=/var/runі -exclude-dir="/var/run". Обидва дають однакові результати.

Чому мій греп не вдається?

Як виключити /var/runрекурсивний греп?


CentOS 7.2, з Grep:

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

1
Ви спробували це просто --exclude-dir=/var/runбез лапок?
JakeGould

@JakeGould - так; і з, і без. Дозвольте мені це додати до питання.
jww

@JakeGould Це не має значення: grepпроцес не бачить лапок в будь-якому випадку. Bash розширює їх, і заміни виконувати немає, тому їх просто видаляють. Це стосується всіх снарядів, про які я знаю.
wchargin

Відповіді:


18

Я думаю, що це, мабуть, тому, що ви явно просите grepпошукати рекурсивно з /var, а /var/runне відповідає SUBDIRECTORY в /var.

Дивіться сторінку grep man, де зазначено:

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

Виправлення

Тому, щоб виправити вашу команду, змініть шаблон виключення, тобто:

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

У мене подібне питання до цього. Як би ви змінили, grep -r --exclude-dir=./root/js sometext .щоб виключити підпапку з поточного місцезнаходження?
psynnott

3
Не впевнений, /що робити щось. grep переходить у кожну папку і починає пошук у цій точці. Це ефективно завжди шукати поточну папку. Якщо ви хочете виключити підпапку (наприклад /home/me/dev/project1/js) і шукаєте з багатьох папок вгору (наприклад, починаючи з /home/me), то вам потрібно вказати одну назву базової папки, яку ви хочете виключити (наприклад --exclude-dir=js). На жаль, це також виключає БУДЬ-те саме папку з тим самим іменем, в інших місцях ієрархії. Якщо ви хочете що - то з великим контролем, ви можете спробувати подивитися на використання findз grep.
jehad
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.