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=\*~"