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


10

fooSVNで管理されている大規模なファイルシステムでのすべての発生を検索したいのですが、どの.svnディレクトリに含まれているものにも一致させたくありません。

実行するとすぐに一致しますgrep -l -e 'foo' *grep -l -e 'foo' --exclude-dir=".svn"、コマンドでsvnディレクトリを除外しようとすると、ハングアップします。

何が悪いのですか?

回答:


11

--exclude-dirコマンドラインでファイルをリストする必要性に取って代わるものではありません。はgrep標準入力を待っているため、「ハング」しています。

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

使用を検討してACK、除外.svnデフォルトでは、同様のフォルダを(および他の多くの機能を持っています)。


2
検索する必要がある他の隠しフォルダーがある場合に備え*.、に変更すると、よりクリーンになります。
ケビン

または--recursive .、代わりに使用したい場合があります。OPにはすでにGNUが含まれているためgrepです。
jw013

個人的には、私はshopt -s dotglobバッシュにいるので、*すでにドットファイルが含まれています。 -r素晴らしいですが、ackデフォルトでもそれを行います:)
ephemient

5

あなたはackに興味があるかもしれません。再帰的な検索(および他のgrepに似た操作)を実行し、デフォルトで.svn.gitなどのディレクトリを除外します。


これのフォローアップとして、私は現在ag、似ていますがより高速なを使用しています。
WhyNotHugo 2017

2

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 {} \;

1

.svn これまでのようにディレクトリにgrepしたくない場合は、次のように$GREP_OPTIONS変数を設定して除外できます。

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

この行をあなたに追加するだけで.bashrc、あなたの再帰的なグループはもはや.svnディレクトリに入りません。もちろん、必要なだけリッチにすることもできます。

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

1
個人的にはエイリアスを使用してこれを行うので、これらのフォルダー内を実際に検索する必要がある場合に除外リストをバイパスできるので、変数を設定解除したりヌルアウトしたりすることなく、そのままgrepを使用できます。また、簡単に展開できるフォルダのリストを維持し、さらに入力する必要なく、除外リストに自動的に追加することもできます。
dragon788

それは良いアプローチです。また、フォルダーにgrepする必要がある場合、変数を設定したことを忘れないという利点もあります。(私がそれらをgrepする必要があったということではありません。)しかし、最近TBH はこれらのものにag(ackクローン)を使用します^^
brandizzi

0

これもawkソリューションです:

find . | awk '$0 !~ /.svn/{print}' | awk '/foo/{print}'

基本的に、すべてのファイルから、/。svn /と一致するファイルをプルーニングし、それらのファイルから、/ foo /と一致するファイルのみを出力します。lsで結果を簡単に使用できるため、このソリューションも気に入っています。たとえば、

ls -tl $(find . | awk '$0 !~ /.svn/{print}' | awk '/foo/{print}')

変更日でソートされたリストビューを表示します。また、それらを使用して何かを実行したい場合(それらを開いたり、実行したりする場合など)は、結果の完全なパスを取得しておくと便利です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.