grep: --exclude-dir が機能しない

grep: --exclude-dir が機能しない

grepDebian/procでは、または/sys。しかし、以下を使用すると:

 --exclude-dir=/proc

または

--exclude-dir={/proc,/sys}

または

--exclude-dir=/proc --exclude-dir=/sys

それからそれはgrepまだ読まれ、/sysしたがって衝突します。それでは、grepスキップ/procとディレクトリをどのように知ることができますか/sys

答え1

--exclude-dirGNUマニュアルの文書grepによると

--exclude-dir=GLOB

名前サフィックスがパターンと一致するすべてのコマンドラインディレクトリはスキップされますGLOB。再帰的に検索するときは、デフォルト名と一致するサブディレクトリをスキップしますGLOB。追加の末尾のスラッシュは無視されますGLOB

ご覧のとおり、指定されたパターン(GLOB)はディレクトリの実際のファイル名にのみ適用され、ディレクトリ名を名前/に含めることはできないため、同様のパターンは決して/proc一致しません。

--exclude-dir=procしたがって、and --exclude-dir=sys(または--exclude-dir={proc,sys}時間が足りない場合)を使用する必要があります。また、この方法は/procandをスキップする/sysだけでなく、その他次のいずれかの名前のディレクトリです。

この2つのディレクトリを回避しながら、ルートから下にディレクトリツリー全体を再帰的に検索するもう1つの方法は、grepfromを使用することですfind

find / \( -type d \( -path /proc -o -path /sys \) -prune \) -o \
    -type f -exec grep 'PATTERN' {} +

これにより、2つのことが検出されます。特定ディレクトリを/proc選択して入力を/sys停止します。findまた、grep一度にできるだけ大きなバッチで見つかった一般的なファイルも提供します。

答え2

それでもこれは素晴らしい作品です!

 --exclude-dir={proc,sys} 

答え3

grepは検索リストにdev /、sys /などで表示されるため、選択したディレクトリを検索中のファイル名の基礎として使用するため、以下を使用しないでください。

grep 'yourstring' -R --exclude-dir={/dev,/sys,/proc} / 

以下を使用する必要があります。

grep 'yourstring '-R --exclude-dir={dev/,sys/,proc/} /

関連情報