Ben sık sık findkaynak kodu aramak, dosyaları silmek için bu komutu kullanın. Rahatsız edici bir şekilde, Subversion her dosyanın kopyalarını .svn/text-base/dizinlerinde sakladığından, basit aramalarım çok sayıda yinelenen sonuç elde ediyor. Örneğin, ben yinelemeli aramak istediğiniz uintkatları messages.hve messages.cppdosyalar:
# 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;
Dizinleri findyoksaymayı nasıl söyleyebilirim .svn?
Güncelleme : SVN istemcinizi 1.7 sürümüne yükseltirseniz, bu artık sorun değildir.
Subversion 1.7'de yapılan değişikliklerin temel özelliği, çalışan kopya meta veri depolamanın tek bir yerde merkezileştirilmesidir.
.svnSubversion 1.7 çalışan kopyaların her dizindeki bir dizin yerine , çalışan kopyanın.svnkökünde yalnızca bir dizin bulunur. Bu dizin (diğer şeylerin yanı sıra), bu çalışma kopyası için Subversion'ın tüm meta verilerini içeren bir SQLite destekli veritabanı içerir.
-execile +çatal değil greponu kullanırken, her dosya için ;yapar. kullanma-exec aslında daha doğru kullanmaktan daha xargs. Lütfen lsargüman listesi boş olsa bile bir şey yapmak gibi komutların chmod, yetersiz argümanlar varsa gibi komutların hata verdiğini unutmayın. Ne demek istediğimi görmek için sadece herhangi bir shell script olmayan bir dizinde aşağıdaki komutu deneyin: find /path/to/dir -name '*.sh' -print0 | xargs -0 chmod 755. Bu bir karşılaştırın: find /path/to/dir -name '*.sh' -exec chmod 755 '{}' '+'.
grepdışarı çıkmak .svnda iyi bir fikir değil. İken finddosya özelliklerini işlemek için uzmanlaşmıştır, grepyapmaz. Örneğinizde , '.svn.txt' adlı bir dosya da egrepkomutunuz tarafından filtrelenecektir . Normal ifadenizi '^ / \. Svn $' olarak değiştirebilmenize rağmen , bunu yapmak hala iyi bir uygulama değildir. -pruneYüklemi findmükemmel (dosya adı veya oluşturma zaman damgası, ya da her türlü koşul sağladığınız tarafından) bir dosya filtreleme için işler. Büyük bir kılıç kullanarak bir hamamböceği öldürebilirseniz bile, bunun önerilen yol olduğu anlamına gelmez :-).
find ... -print0 | xargs -0 egrep ...yerine kullanmayı deneyinfind ... -exec grep ...(grepher dosya için çatal değil , aynı anda bir grup dosya için). Bu formu.svnkullanarak,-prunebulma seçeneğini kullanmadan dizinleri defind ... -print0 | egrep -v '/\.svn' | xargs -0 egrep ...