フォルダを再帰的に検索しますが、svnサブフォルダは除外します。

フォルダを再帰的に検索しますが、svnサブフォルダは除外します。

SVNが管理する大規模ファイルシステムのすべてのエントリを探したいが、どのディレクトリに含まれるものもfoo一致させたくない。.svn

これはすぐに一致するものを取得しますが、コマンドを使用grep -l -e 'foo' *してsvnディレクトリを除外しようとすると中断されます。grep -l -e 'foo' --exclude-dir=".svn"

私は何が間違っていましたか?

答え1

--exclude-dirコマンドラインにファイルを一覧表示する必要性を上書きしません。grep標準入力を待っているため「中断」されています。

grep -l -e 'foo' --exclude-dir=".svn"*

使用を検討してください確認する.svnデフォルトでは同様のフォルダを除外します(そして他の多くの機能があります)。

答え2

あなたは興味があるかもしれません確認する。再帰検索(およびその他のgrep同様の操作)を実行し、次の項目を除外します。.svnまたは.git基本的に。

答え3

解決策はgrep --exclude-dir...問題ありませんが、他の方法を示すために、次の方法でfindこれを行うことができます-prune

find -name .svn -prune -o -type f -exec grep -l "$pattern" {} +

find通常より優れた作業を行うには、次の手順を実行しますgrep -r

find -name .svn -prune -o -type f -exec grep -q "$pattern" {} \; -exec ./process {} \;

答え4

次のようなことをしたくない場合.svn 一度$GREP_OPTIONS次のように変数を除外するように設定できます。

export GREP_OPTIONS="--exclude-dir=\*/.svn/\*"

再帰 grep にこの行を追加すると、もはや.bashrcディレクトリに入りません.svn。もちろん、必要なだけ豊富にできます。

export GREP_OPTIONS="--exclude-dir=\*/.svn/\* --exclude-dir=\*/.hg/\* --exclude-dir=\*/.git/\* --exclude=\*~"

関連情報