SORU
28 EYLÜL 2009, PAZARTESİ


' seçeneği '' sh '-erik nasıl kullanılır?

Çok güzel örnek: 'bul', kimse bazı örnekler ve açıklamaları? adamı anlamıyorum Bu düzenli ifade birleştirebilir miyim?

< / ^ hr .

daha ayrıntılı soru şöyledir: Bir Arayüz gibi olan kabuk, bir changeall, yazma "[- r|-R] "" "". dize1 dize2 changeall Bir sonek olan tüm dosyaları bulacaktır .h, .C, .cc ya .ve tüm tekrarlarını değiştirmek cpp"""". dize1 dize2 -r Geçerli dir kalıyorum ya subdir dahil seçeneği sadece. NOT: 1) non-recursive durumda, '' İzin Verilmiyor, sadece kullanabiliriz '' ve ''. sed bulmak mı 2) Ben 'derinlemesine' ama desteklenen DEĞİLDİ. bul çalıştı Acaba bu yüzden-prune '' yardım edebilir, ama bu örnek bile anlamadım 'adam'.

< / ^ hr .

Ödev yapıyordum, kendim bitirmek istiyorum çünkü çok detaylı soru sormadım. EDİT2: Ben zaten yapmış ve elinde bu yana, artık tüm bu soru ifade edebilirim. Ayrıca, kullanmadan atama bitirmeyi başardım-budamak, ama yine de öğrenmek ister.

CEVAP
28 EYLÜL 2009, PAZARTESİ


-prune bir eylem olduğu konusunda kafa karıştırıcı bulduğum şey (-print) gibi değil, bir test (-name). "Yapılacaklar" listesi . değiştirir ^em>ama her zaman true değerini döndürür.

-prune kullanarak genel yapısı bu

find [path] [conditions to prune] -prune -o \
                                   [your usual conditions] [actions to perform]

Hemen hemen her zaman test (-prune de dahil olmak üzere) ilk bölümünü döndürür, çünkü hemen -prune, sonra -oyanlışşeyler için gerçekten (örn: budamak için istemediğin şeyler).

İşte size bir örnek:

find . -name .snapshot -prune -o -name '*.foo' -print

Bu "*."altında olmayan dosyaları ".foo anlık" dizinleri. Bu örnekte, -name .snapshot "budamak istediğiniz şeyler için testler", ve -name '*.foo' -print elektrik, telefon, yol, sonra koymak istiyorum "şeyler".

Önemli notlar:

  1. Eğer yapmak istediğiniz tüm sonuçlar baskı ise -print eylem bırakmak için kullanılan olabilir. Genel olarakyok-prune kullanırken bunu yapmak istiyorum.

    Bulmak varsayılan davranış "ve"tümeğer eylemler -prune (ironik bir şekilde) sonunda dışında ise yok -print eylem ile ifade. Bu yazı anlamına gelir:

    find . -name .snapshot -prune -o -name '*.foo'              # DON'T DO THIS
    

    bu yazı karşılığıdır:

    find . \( -name .snapshot -prune -o -name '*.foo' \) -print # DON'T DO THIS
    

    ayrıca genellikle ne istediğinizi değil budama sen dizinin adını yazdırmak anlamına gelir. Bunun yerine daha iyi eğer istediğin buysa açıkça -print eylem belirtmek için:

    find . -name .snapshot -prune -o -name '*.foo' -print       # DO THIS
    
  2. "Her zamanki durumu da erik durum, o dosyaları . uyan" dosyaları maçı olursa eğer ^em>değilçıkış dahil. Bunu düzeltmenin bir yolunu durumunuz budamak -type d bir yüklem eklemektir.

    Örneğin, .git (bu biraz yapmacık -- normalde tek şey adlı kaldırmak gerekir . herkesin kabul edeceği ile başlayan herhangi bir dizin budamak istedi etsek ^em>tam olarak.git), ama onun dışında tüm dosyaları, .gitignore gibi dosyalar da dahil olmak üzere görmek istedim. Bu deneyebilirsiniz:

    find . -name '.git*' -prune -o -type f -print               # DON'T DO THIS
    

    Budeğilçıkışı .gitignore vardır. İşte sabit sürümü:

    find . -type d -name '.git*' -prune -o -type f -print       # DO THIS
    

Eğer find kılavuz daha detaylı bir açıklama en GNU kamu hizmetleri için de geçerlidir () için find, texinfo sayfanın GNU sürümünü kullanıyorsanız. ekstra ipucu:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BenjiManTV

    BenjiManTV

    20 Mart 2011
  • FPSRussia

    FPSRussia

    19 NİSAN 2010
  • Manuel Vizcaino

    Manuel Vizca

    27 Mayıs 2008