`find`で.svnディレクトリを無視するにはどうすればよいですか?


227

私はよくfindコマンドを使用して、ソースコード全体を検索し、ファイルを削除します。厄介なことに、Subversionは各ファイルの複製を.svn/text-base/ディレクトリに保存しているため、単純な検索で大量の複製結果が得られます。たとえばuint、複数のmessages.hmessages.cppファイルを再帰的に検索したいとします。

# find -name 'messages.*' -exec grep -Iw uint {} +
./messages.cpp:            Log::verbose << "Discarding out of date message: id " << uint(olderMessage.id)
./messages.cpp:    Log::verbose << "Added to send queue: " << *message << ": id " << uint(preparedMessage->id)
./messages.cpp:                Log::error << "Received message with invalid SHA-1 hash: id " << uint(incomingMessage.id)
./messages.cpp:            Log::verbose << "Received " << *message << ": id " << uint(incomingMessage.id)
./messages.cpp:            Log::verbose << "Sent message: id " << uint(preparedMessage->id)
./messages.cpp:        Log::verbose << "Discarding unsent message: id " << uint(preparedMessage->id)
./messages.cpp:        for (uint i = 0; i < 10 && !_stopThreads; ++i) {
./.svn/text-base/messages.cpp.svn-base:            Log::verbose << "Discarding out of date message: id " << uint(olderMessage.id)
./.svn/text-base/messages.cpp.svn-base:    Log::verbose << "Added to send queue: " << *message << ": id " << uint(preparedMessage->id)
./.svn/text-base/messages.cpp.svn-base:                Log::error << "Received message with invalid SHA-1 hash: id " << uint(incomingMessage.id)
./.svn/text-base/messages.cpp.svn-base:            Log::verbose << "Received " << *message << ": id " << uint(incomingMessage.id)
./.svn/text-base/messages.cpp.svn-base:            Log::verbose << "Sent message: id " << uint(preparedMessage->id)
./.svn/text-base/messages.cpp.svn-base:        Log::verbose << "Discarding unsent message: id " << uint(preparedMessage->id)
./.svn/text-base/messages.cpp.svn-base:        for (uint i = 0; i < 10 && !_stopThreads; ++i) {
./virus/messages.cpp:void VsMessageProcessor::_progress(const string &fileName, uint scanCount)
./virus/messages.cpp:ProgressMessage::ProgressMessage(const string &fileName, uint scanCount)
./virus/messages.h:    void _progress(const std::string &fileName, uint scanCount);
./virus/messages.h:    ProgressMessage(const std::string &fileName, uint scanCount);
./virus/messages.h:    uint        _scanCount;
./virus/.svn/text-base/messages.cpp.svn-base:void VsMessageProcessor::_progress(const string &fileName, uint scanCount)
./virus/.svn/text-base/messages.cpp.svn-base:ProgressMessage::ProgressMessage(const string &fileName, uint scanCount)
./virus/.svn/text-base/messages.h.svn-base:    void _progress(const std::string &fileName, uint scanCount);
./virus/.svn/text-base/messages.h.svn-base:    ProgressMessage(const std::string &fileName, uint scanCount);
./virus/.svn/text-base/messages.h.svn-base:    uint        _scanCount;

ディレクトリfindを無視するにはどうすればよい.svnですか?


更新:SVNクライアントをバージョン1.7にアップグレードした場合、これは問題ではなくなりました。

Subversion 1.7で導入された変更の主要な機能は、作業コピーのメタデータストレージを単一の場所に集中化することです。.svn作業コピーのすべてのディレクトリにあるディレクトリの代わりに、Subversion 1.7作業コピーには.svn、作業コピーのルートに1つのディレクトリしかありません。このディレクトリには、(とりわけ)SQLiteでバックアップされたデータベースが含まれています。このデータベースには、その作業コピーにSubversionが必要とするすべてのメタデータが含まれています。


4
パフォーマンスのためfind ... -print0 | xargs -0 egrep ...に、代わりにを使用してみてくださいfind ... -exec grep ...grepファイルごとにfork するのではなく、一度に多数のファイルに対してfork します)。また、プルーンのことができます。このフォームを使用して.svn使用せずにディレクトリを-prune、すなわち、検索のオプションをfind ... -print0 | egrep -v '/\.svn' | xargs -0 egrep ...
vladr

3
@Vlad:私の知る限り、-execwith を使用し+てもgrep各ファイルにfork しませんが、with を使用すると、fork します;。を使用する方-execが実際にはを使用するよりも正確ですxargs。のようなコマンドlsは、引数リストが空の場合でも何かを実行しますが、のようなコマンドは、引数chmodが不十分な場合にエラーを出します。私の意味を確認するには、シェルスクリプトのないディレクトリで次のコマンドを試してくださいfind /path/to/dir -name '*.sh' -print0 | xargs -0 chmod 755。これと比較してください:find /path/to/dir -name '*.sh' -exec chmod 755 '{}' '+'
Siu Ching Pong -Asuka Kenji-

2
@Vlad:以外にも、grepアウト-ingが.svnあまりにも良いアイデアではありません。一方でfind、ファイルのプロパティを処理するために特化されて、grepしません。この例では、「。svn.txt」という名前ファイルもegrepコマンドによってフィルタリングされます。正規表現を'^ / \。svn $'に変更することはできますが、そうすることはまだお勧めできません。の-prune述語はfind、ファイルのフィルタリングに完全に機能します(ファイル名、作成タイムスタンプ、または指定した条件による)。たとえ大きな剣を使ってゴキブリを殺すことができたとしても、それがそうするための提案された方法であるとは限りません:-)。
Siu Ching Pong -Asuka Kenji-

3
Gitに切り替えると、この問題が修正されました(他にも多数あります)。で、作業コピーのルートに.gitフォルダーのみが作成され、SVNのようなそのすべてのフォルダーには作成されません。さらに、.gitフォルダーには、同じ名前の実際のファイルと混同されるプレーンファイルが含まれていません。
Tronic

3
2Dan Moulding:svn 1.7は単一のトップレベルの.svnディレクトリを作成します
ccpizza '19

回答:


65

検索については、ackをご覧になることをお勧めできますか?これはソースコードに対応しfindているため、上記のようなソースコードリポジトリ情報を含む多くのファイルタイプを自動的に無視します。


3
私はackとても気に入っていますfind -type f -name "*.[ch]" | xargs grepが、大規模なコードベースを処理する場合よりも大幅に遅いことがわかりました。
John Ledbetter、2010

63
ジョン、私はackの作成者です。ackとgrepの速度の問題の詳細を教えていただければ幸いです。私が見つけたすべてのケースで、それらは完全に同等でした。github.com/petdance/ack/issuesお知らせいただくか、petdance.comのandy宛てにメールでお問い合わせください。ありがとう。
アンディレスター

63
皆さん、それはヒントですが、質問に対する答えではありません!:)
dolzenko

8
されていないack、より良いとして請求grep、ソースに対応していませんかfind?これを置き換えに使用するいくつかの例findは、これを実際の答えにします。
michiakig 2013年

3
それは、彼が尋ねていることを知らなかった質問に対する答えです。=)
Frungi 2014年

293

なぜか

find . -not -iwholename '*.svn*'

-not述語は、パスのどこかに.svnがあるすべてのものを否定します。

だからあなたのケースではそれは

find -not -iwholename '*.svn*' -name 'messages.*' -exec grep -Iw uint {} + \;

5
「-not」と「-iwholename」の超ビッグ+1。Ackはすばらしいので使用していますが、find / execにはまだ用途があります。
David Blevins、2011

9
元の質問に実際に回答した唯一の回答。
Brendon Crawford

14
私は自分の要素から離れており、このコメントについて批判されると確信していますが、-notおよび-wholenameはPOSIXに準拠していないようです。使った!-notの代わりに-pathおよび-iwholenameの代わりに-pathを使用すると、同じ結果が得られます。私のマニュアルページ(Ubuntu 12.04)によると、この構文はPOSIXに準拠しています。
John

1
@whaley '*.svn*'最初は言ったけど、それから'*.svn'。どちらが正しいですか?どちらも機能しますか?たぶんそうなると思います '*.svn*'か?
キースM

1
@KeithMグレートキャッチ。この答えは何年もここにあり、今まで誰もそれを理解していなかったと思います。
クジラ2018年

141

次のように:

find . -path '*/.svn*' -prune -o -print

または、パス接頭辞ではなくディレクトリに基づく:

find . -name .svn -a -type d -prune -o -print

14
@カレブ:こんにちは。find . -type d -name .svn -prune -o -print少し速いのでお勧めします。POSIX標準によれば、式は指定された順序で1つずつ評価されます。の最初の式-aがのfalse場合、2番目の式は評価されません(短絡および評価とも呼ばれます)。
Siu Ching Pong -Asuka Kenji-

2
@Kaleb:ファイルタイプの比較(整数にビットが設定されているかどうかのテストに相当)はファイル名の比較(文字列比較に相当、O(n))に比べて高速であるため、理論的には前に置く方が効率的です。ただし、非常に大きなディレクトリツリーがある場合を除いて、通常は重要ではありません。-type d-name .svn
Siu Ching Pong -Asuka Kenji-

5
@ SiuChingPong-AsukaKenji-いいえ、-typeはすべてのファイルでstat(2)呼び出しを必要とするため、ファイル名のみを比較する方が高速です。ただし、ファイル名はreaddir(3)応答の一部です。
hraban 2015

3
@JonathanHartley -print最後の式の一部としてがありません。のようなfind . -name .git -prune -o \( -type f -name LICENSE -print \)ものは期待どおりに動作します。
sschuberth

1
あなたは他のディレクトリ.gitとの.svnとちょうどリストの両方を無視したい場合は、find . -name .svn -prune -o -name .git -prune -o -type d -print-type d2つの前に置くと数ミリ秒速くなるかもしれませ-nameんが、追加のタイピングをする価値はありません。
JPaget

34

.svn.gitおよびその他の隠しディレクトリ(ドットで始まる)を無視するには、次を試してください:

find . -type f -not -path '*/\.*'

ただし、使用目的がfindファイル内の検索である場合は、次のコマンドを使用してみてください。

  • git grep -Gitリポジトリ内のパターンを検索するために特別に設計されたコマンド。
  • ripgrep-デフォルトでは、隠しファイルとで指定され.gitignoreたファイルは無視されます。

関連:Linuxで特定のテキストを含むすべてのファイルを見つけるにはどうすればよいですか?


ベストアンサーイモ。他は単純な質問に答えない事柄を説明しようとします。
アンソニー

19

これが私があなたの場合に行うことです:

find . -path .svn -prune -o -name messages.* -exec grep -Iw uint {} +

Emacsのrgrep組み込みコマンドは、.svnディレクトリを無視しますfind | grep。また、を実行するときにおそらく関心のない多くのファイルを無視します。デフォルトで使用するものは次のとおりです。

find . \( -path \*/SCCS -o -path \*/RCS -o -path \*/CVS -o -path \*/MCVS \
          -o -path \*/.svn -o -path \*/.git -o -path \*/.hg -o -path \*/.bzr \
          -o -path \*/_MTN -o -path \*/_darcs -o -path \*/\{arch\} \) \
     -prune -o \
       \( -name .\#\* -o -name \*.o -o -name \*\~ -o -name \*.bin -o -name \*.lbin \
          -o -name \*.so -o -name \*.a -o -name \*.ln -o -name \*.blg \
          -o -name \*.bbl -o -name \*.elc -o -name \*.lof -o -name \*.glo \
          -o -name \*.idx -o -name \*.lot -o -name \*.fmt -o -name \*.tfm \
          -o -name \*.class -o -name \*.fas -o -name \*.lib -o -name \*.mem \
          -o -name \*.x86f -o -name \*.sparcf -o -name \*.fasl -o -name \*.ufsl \
          -o -name \*.fsl -o -name \*.dxl -o -name \*.pfsl -o -name \*.dfsl \
          -o -name \*.p64fsl -o -name \*.d64fsl -o -name \*.dx64fsl -o -name \*.lo \
          -o -name \*.la -o -name \*.gmo -o -name \*.mo -o -name \*.toc \
          -o -name \*.aux -o -name \*.cp -o -name \*.fn -o -name \*.ky \
          -o -name \*.pg -o -name \*.tp -o -name \*.vr -o -name \*.cps \
          -o -name \*.fns -o -name \*.kys -o -name \*.pgs -o -name \*.tps \
          -o -name \*.vrs -o -name \*.pyc -o -name \*.pyo \) \
     -prune -o \
     -type f \( -name pattern \) -print0 \
     | xargs -0 -e grep -i -nH -e regex

ほとんどのバージョン管理システムで作成されたディレクトリや、多くのプログラミング言語で生成されたファイルは無視されます。あなたは、このコマンドを呼び出すエイリアスを作成し、置き換えることができfind、およびgrep特定の問題のためのパターン。


12

GNU find

find .  ! -regex ".*[/]\.svn[/]?.*"

PHPが処理する配列のディレクトリパスをロードしていました。(何らかの理由で)上位にある他の回答は、検索結果のファイルを除外しませんでした(にもかかわらず-type d)-この回答はそうしました。+1
ホレンベック

11

私はこの目的のためにgrepを使用します。これを〜/ .bashrcに入れてください

export GREP_OPTIONS="--binary-files=without-match --color=auto --devices=skip --exclude-dir=CVS --exclude-dir=.libs --exclude-dir=.deps --exclude-dir=.svn"

grepは呼び出し時にこれらのオプションを自動的に使用します


1
「grep」が1〜2年前に「--exclude-dir」オプションを取得しただけであることに注意してください。最近のLinuxディストリビューションにはそれが含まれていますが、私が正しく覚えている場合は、OSXで自分のgrepをコンパイルする(または自作に依頼する)必要がありました。
Jonathan Hartley

これのマイナーバリアントを使用します。私の.bashrcは、として定義されているBash関数「grp」を作成しGREP_OPTIONS=xxx grep "$@"ます。つまり、GREP_OPTIONS変数は、「grp」を使用して手動で実行したgrepのインスタンスに対してのみ設定されます。これは、ツールを実行する状況が発生することはなく、内部的にはgrepを呼び出しますが、grepが期待どおりに動作していないためにツールが混乱します。また、--include=*.pyPythonファイルを検索するために、「grp」を呼び出す2番目の関数「grpy」を追加していますが、を追加しています。
Jonathan Hartley

実際、リフレクションでは、私のやり方でGREP_OPTIONSを使用する必要がなくなりました。私は今、を呼び出すシェル関数「grp」を持っていますgrep --exclude=tags --exclude_dir=.git ...etc... "$@"。これは「ack」のように実行されるのが好きですが、私はそれが何をしているのかを認識し、制御しています。
Jonathan Hartley

9

find . | grep -v \.svn


あなたは脱出しなければならない..svn正規表現。
vladr 2010年

4
使用すると、文字列を--fixedのgrepで:| fgrep -v /.svn/または`| grep -F -v / .svn / ` は、名前の一部に「.svn」が含まれるファイルではなく、ディレクトリを正確に除外します。
スティーブンP

8

簡単に理解できるgrepを使用してコマンドをパイプしないのはなぜですか。

your find command| grep -v '\.svn'

あなたは脱出しなければならない..svn正規表現。
vladr 2010年

疑いの余地のない@Yclian; そうしないと、「。」以降、「tsvn」、「1svn」、「asvn」などと呼ばれるディレクトリも無視されます。正規表現のワイルドカード:「任意の文字に一致」
vladr 2010

さて、私はそれが-Eと-Gの場合にのみ起こると思いました。私はテストしたばかりです。:(
yclian

2
この答えは、他のどの答えよりも概念的に単純であるため、気に入っています。'find'の使用法のばかげた構文を思い出せませんが、非常に多くの状況で使用されるため、grep -vの使用方法を確実に思い出せます。
mattismyname 2015年

8

というスクリプトを作成します~/bin/svnfind

#!/bin/bash
#
# Attempts to behave identically to a plain `find' command while ignoring .svn/
# directories.

OPTIONS=()
PATHS=()
EXPR=()

while [[ $1 =~ ^-[HLP]+ ]]; do
    OPTIONS+=("$1")
    shift
done

while [[ $# -gt 0 ]] && ! [[ $1 =~ '^[-(),!]' ]]; do
    PATHS+=("$1")
    shift
done

# If user's expression contains no action then we'll add the normally-implied
# `-print'.
ACTION=-print

while [[ $# -gt 0 ]]; do
    case "$1" in
       -delete|-exec|-execdir|-fls|-fprint|-fprint0|-fprintf|-ok|-print|-okdir|-print0|-printf|-prune|-quit|-ls)
            ACTION=;;
    esac

    EXPR+=("$1")
    shift
done

if [[ ${#EXPR} -eq 0 ]]; then
    EXPR=(-true)
fi

exec -a "$(basename "$0")" find "${OPTIONS[@]}" "${PATHS[@]}" -name .svn -type d -prune -o '(' "${EXPR[@]}" ')' $ACTION

このスクリプトはfind通常のコマンドと同じように動作しますが、.svnディレクトリを削除します。それ以外の動作は同じです。

例:

# svnfind -name 'messages.*' -exec grep -Iw uint {} +
./messages.cpp:            Log::verbose << "Discarding out of date message: id " << uint(olderMessage.id)
./messages.cpp:    Log::verbose << "Added to send queue: " << *message << ": id " << uint(preparedMessage->id)
./messages.cpp:                Log::error << "Received message with invalid SHA-1 hash: id " << uint(incomingMessage.id)
./messages.cpp:            Log::verbose << "Received " << *message << ": id " << uint(incomingMessage.id)
./messages.cpp:            Log::verbose << "Sent message: id " << uint(preparedMessage->id)
./messages.cpp:        Log::verbose << "Discarding unsent message: id " << uint(preparedMessage->id)
./messages.cpp:        for (uint i = 0; i < 10 && !_stopThreads; ++i) {
./virus/messages.cpp:void VsMessageProcessor::_progress(const string &fileName, uint scanCount)
./virus/messages.cpp:ProgressMessage::ProgressMessage(const string &fileName, uint scanCount)
./virus/messages.h:    void _progress(const std::string &fileName, uint scanCount);
./virus/messages.h:    ProgressMessage(const std::string &fileName, uint scanCount);
./virus/messages.h:    uint        _scanCount;

このスクリプトは期待どおりに機能しません。"svnfind -type f"で実行すると、svn-directoriesとsvn-directories内のファイルも出力されます
Ingo Fischer

@ifischerをechofindコマンドに追加して、実行するコマンドを教えてください。svnfind -type f私のRed Hatマシンでうまく動作します。
John Kugelman、2011年

OSに依存しているようです。Debian Squeezeを実行しています(Ubuntuでも同じです)。「エコーを追加」の意味がわかりませんか?
インゴフィッシャー

@ifischer最後の行をに変更してecho find "${OPTIONS[@]}"...、実際に実行するのではなく、findコマンドを出力します。
John Kugelman、2011年

OKがする最後の行を変更echo find ${OPTIONS[@]} ${PATHS[@]} -name .svn -type d -prune -o ( ${EXPR[@]} ) $ACTION:これは私に次のような出力を与え、find -type f -name .svn -type d -prune -o ( -true ) -print
インゴ・フィッシャー

5

ただ、私が追加しようと思いましたシンプルな代替(の使用詳細などのKalebのと他人のポストにfind -prune、オプションをackrepofindコマンドなど)であるあなたが質問で説明してきた利用状況に特に適用(および他の同様の用途):

  1. パフォーマンスのために、の代わりに(find ... -exec grep ... +これを指摘してくれたKenjiに感謝)またはfind ... | xargs egrep ...(ポータブル)またはfind ... -print0 | xargs -0 egrep ...(GNU;スペースを含むファイル名で動作)を常に使用するようにしてください。find ... -exec grep ... \;

    find ... -exec ... +そしてfind | xargs、フォームはフォークしないegrepで、その結果、一度に各ファイルのではなく、たくさんのファイルのためにはるかに高速に実行

  2. 使用している場合find | xargsフォームを使うこともできgrep、容易かつ迅速にプルーンに.svn、すなわち、(または任意のディレクトリや正規表現)find ... -print0 | grep -v '/\.svn' | xargs -0 egrep ...(クイック何かを必要とし、設定する方法を覚えておくことは気にすることはできませんときに便利なfind-pruneロジックを。)

    このfind | grep | xargsアプローチはGNU find-regexオプション(ghostdog74の投稿を参照)に似ていますが、移植性が高くなります(GNU findが利用できないプラットフォームでも機能します)。


1
@Vlad:-exec切り替えには2つの形式があることに注意してくださいfind。1つはで終わり;、もう1つはで終わり+ます。で終わる+ものは{}、すべての一致するファイルのリストで置き換えられます。その上、あなたの正規表現も'/\.svn'ファイル名にマッチします'.svn.txt'。詳細については、質問に対する私のコメントを参照してください。
Siu Ching Pong -Asuka Kenji-

2
@Vlad:ここのためのPOSIX標準であるfindユーティリティが。-exec:-) の部分を参照してください。
Siu Ching Pong -Asuka Kenji-

4

ソースコードリポジトリでは、通常、テキストファイルに対してのみ処理を行います。

1行目は、CVS、SVN、およびGITリポジトリファイルを除くすべてのファイルです。

2行目はすべてのバイナリファイルを除外します。

find . -not \( -name .svn -prune -o -name .git -prune -o -name CVS -prune \) -type f -print0 | \
xargs -0 file -n | grep -v binary | cut -d ":" -f1

3

-not -pathオプションを指定してfindを使用します。私はプルーンでうまくいきませんでした。

find .  -name "*.groovy" -not -path "./target/*" -print

ターゲットディレクトリパスにないgroovyファイルを見つけます。


3

この問題を解決するには、次の検索条件を使用します。

find \( -name 'messages.*' ! -path "*/.svn/*" \) -exec grep -Iw uint {} +

次のような制限を追加できます。

find \( -name 'messages.*' ! -path "*/.svn/*" ! -path "*/CVS/*" \) -exec grep -Iw uint {} +

これについての詳細は、manページのセクション「オペレーター」を参照してください。http//unixhelp.ed.ac.uk/CGI/man-cgi?find


3

あなたがする場合は注意してください

find . -type f -name 'messages.*'

次に-print、式(-type f -name 'messages.*')全体がtrueの場合に暗黙的に示され-execます。

一方、特定のディレクトリへの下降を停止するには、それらのディレクトリと一致するものを使用し、-pruneその後に続く必要があります(これは、ディレクトリへの下降を停止することを目的としています)。そのようです:

find . -type d -name '.svn' -prune

これは.svnディレクトリに対してTrueと評価され、これに-o(OR)を付けることでブール短絡を使用できます。その後-o、最初の部分がFalseの場合にのみチェックされ、その後に続くものは.svnディレクトリでありません。つまり、次のようになります。

find . -type d -name '.svn' -prune -o -name 'message.*' -exec grep -Iw uint {}

-oつまり-name 'message.*' -exec grep -Iw uint {}、.svnディレクトリ内にないファイルについて、の正しいものだけを評価します。

そのため注意.svn「メッセージ*」可能性が常にディレクトリ(とない例えばファイル)であり、この場合には、確かに名前が一致していないで、あなたにも出たままかもしれません-type dし、実行します。

find . -name '.svn' -prune -o -name 'message.*' -exec grep -Iw uint {}

最後に、アクションを省略した場合(アクションである場合-exec)は、次のように言ってください。

find . -name '.svn' -prune -o -name 'message.*'

その場合、-printアクションは暗黙指定されますが、-name '.svn' -prune -oパーツを含むWHOLE式に適用されるため、すべての.svnディレクトリと 'message。*'ファイルを出力しますが、これはおそらく望んでいるものではありません。したがって-prune、このように使用する場合は、ブール式の右側で常に「アクション」を使用する必要があります。そして、そのアクションが印刷である場合、次のように明示的に追加する必要があります:

find . -name '.svn' -prune -o -name 'message.*' -print


2

find / grepの単純なラッパーであり、ackよりもはるかに高速なfindrepoを試してください。この場合は、次のように使用します。

findrepo uint 'messages.*'

2

wcfind .svnディレクトリを自動的に削除するために使用する検索ラッパースクリプトです。


1

これは私にとってUnixプロンプトで機能します

gfind。\(-not -wholename '* \。svn *' \)-type f -name 'messages。*' -exec grep -Iw uint {} +

上記のコマンドは、.svnにないファイルをリストし、あなたが言及したgrepを実行します。


「gfind」はタイプミスですか?Ubuntu 14.04にはありません。
Jonathan Hartley

あなたが「検索」を意味すると仮定すると、これはまったく機能しません。また、などのファイルを除外しますxxx.svnxxx。これは重要です。たとえば、svnの代わりにgitを使用している場合、findの結果に.gitignore(メタデータではなく、リポジトリに含まれる通常のファイル)などのファイルを含めることがよくあります。
ジョナサンハートレイ

1

私は通常、.svnを削除してもう一度grepを介して出力をパイプしますが、私の使用ではそれほど遅くありません。典型的な例:

find -name 'messages.*' -exec grep -Iw uint {} + | grep -Ev '.svn|.git|.anythingElseIwannaIgnore'

または

find . -type f -print0 | xargs -0 egrep messages. | grep -Ev '.svn|.git|.anythingElseIwannaIgnore'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.