' 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
-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 -o
yanlışş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:
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
"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:
Vim kayıtları nasıl kullanılır?...
Nasıl yansıması genel bir Yöntemi çağı...
Geçişlerini için Dinlenmek nedir ve na...
Nasıl bir WordPress kullanmak içinde s...
Nasıl ve kabuk boolean değişkenleri bi...