Grepが--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"。どちらも同じ結果になります。

grepが失敗するのはなぜですか?

/var/run再帰的なgrepから除外するにはどうすればよいですか?


CentOS 7.2、Grep:

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

1
--exclude-dir=/var/run引用符なしで試してみましたか?
JakeGould 2016

@JakeGould-はい。ありとなしの両方。それを質問に追加させてください。
jww 2016

@JakeGould違いgrepはありません。どちらの場合も、プロセスは引用符を表示しません。Bashはそれらを展開し、実行する置換がないため、単に削除されます。これは、私が知っているすべてのシェルに当てはまります。
wchargin

回答:


18

私はあなたが明示的に求めているので、それはおそらくだと思うgrepから再帰的に検索する/varと、/var/runサブディレクトリの下に一致していません/var

grepのマニュアルページを参照してください。

--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
/sが何かを行うかどうかは不明です。grepは各フォルダーに入り、その時点で検索を開始します。事実上、常に現在のフォルダーを検索しています。サブフォルダ(例:)を除外し、/home/me/dev/project1/js多くのフォルダ(例:から開始/home/me)から検索する場合は、除外する1つの基本フォルダ名(例:)を指定する必要があります--exclude-dir=js。残念ながら、これにより、階層の他の場所にある同じ名前のサブフォルダも除外されます。より細かい制御が必要な場合は、での使用findを試してみることができますgrep
jehad 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.