1. ホーム
  2. linux

[解決済み】`find`が.svnディレクトリを無視するようにするにはどうしたらいいですか?

2022-04-05 10:34:22

質問

私はよく 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 ディレクトリが作業コピーのルートにあります。このディレクトリには(特に)SQLiteでバックアップされたデータベースがあり、Subversionがその作業コピーに必要とするすべてのメタデータが含まれています。

解決するには?

検索するには、次のサイトを参照してください。 アック ? これは、ソースコードを意識した find そのため、上記のようなソースコードのリポジトリ情報を含む多くの種類のファイルを自動的に無視します。