Yanıtlar:
Sorunuzu doğrudan yanıtlamak için "hayır - tanımladığınız şeyi yapamazsınız rm
".
Sen olabilir , ancak, Bunu, birleştirmek bunu find
. İşte bunu yapmanın birçok yolundan biri:
# search for everything in this tree, search for the file pattern, pipe to rm
find . | grep <pattern> | xargs rm
Örneğin, tüm * ~ dosyaları tıklatmak istiyorsanız, bunu yapabilirsiniz:
# the $ anchors the grep search to the last character on the line
find . -type f | grep '~'$ | xargs rm
Bir yorumdan * genişletmek için :
# this will handle spaces of funky characters in file names
find -type f -name '*~' -print0 | xargs -0 rm
find | grep | xargs rm
. Boşluklu dosyalar (veya yeni satırlar) varsa, bu kesilir (ve dosya adlarına ve boşlukların bulunduğu yere bağlı olarak) silmek istemediğiniz şeyleri silebilir. find … -print0 | xargs -0 rm
çok daha sağlam olacak. Ancak bu, yalnızca istediğiniz dosyaları eşleştirmek ve yazdırmak için 's tahminlerini grep
kullanmanız gerektiği anlamına gelir find
. warren'in ikinci örneği daha sağlam olacak find -type f -name '*~' -print0 | xargs -0 rm
.
"diğer komutları kullanmadan"
Hayır.
Bash'i globstar
set ile birlikte kullanarak , evet :
rm basedir/**/my*pattern*
Eşleştirdiğiniz dosyaları listelemeden ls -1
önce örneğin ilk önce deneyin rm
.
Seçenekleri örn shopt -s globstar
.
Alternatif olarak, daha kısa bir find
varyant:
find -type f -name 'my*pattern*' -delete
veya GNU için find
:
find -type f -name 'my*pattern*' -exec rm {} +
veya GNU olmayanlar için başka bir alternatif find
(biraz daha yavaş):
find -type f -name 'my*pattern*' -exec rm {} \;
Ayrıca sormak gibi dizinleri kaldırmak için: sadece değişim rm
içine rm -r
yukarıdaki komutları ve yalnızca eşleştirme atlamak -type f
içinde find
komutlar.
Ben asuumed "rm -rf" nerede dosya adları ve * ve? vb. (ör. todays_log_2009 ????. log). Bu, geçerli Dir'den başlayacak ve bu kalıbı oluşturan dosyaları yinelemeli olarak kaldıracaktır.
Eğer kullanırsanız zsh (1) , ile "globbing genişletilmiş" açmak setopt extendedglob
.zshrc dosyanızda içinde. Desene '** /' önekinin eklenmesi tekrarlı olarak silinir:
% rm -rf ** / <desen>
Ancak, silinecek çok fazla dosya varsa , xargs (1) veya -exec ile (1) bulmak için başvurmalısınız ve bunu kabuk komut dosyalarında da yapmanızı öneririz.