Komut satırındaki dosyaları normal ifadelerle nasıl silebilirim?


18

Diyelim ki FOOXX adında 20 dosyam var, burada XX dosya sayısıdır, örneğin 01, 02 vb.

Şu anda, 10 numaradan daha düşük tüm dosyaları silmek istiyorsam, bu kolay ve sadece bir joker karakter kullanıyorum, örneğin rm FOO0 *

Ancak, örneğin 13-15 aralığında belirli dosyaları silmek istersem, bu daha zor hale gelir.

rm FPP [13-15] çalışmıyor ve tüm dosyaları silmek isteyip istemediğimi soruyor. Benzer şekilde rm FOO1 [3-5] FOO1 ile başlayan tüm dosyaları silmek istiyor

Peki, böyle dosya aralıklarını silmenin en iyi yolu nedir?

Hem bash hem de zsh ile denedim ve böyle temel bir görev için çok farklı olduklarını düşünmüyorum?


"... rm FOO1 [3-5] FOO1 ile başlayan tüm dosyaları silmek istiyor" Bu hiç mantıklı değil ve kesinlikle burada böyle değil.
Ignacio Vazquez-Abrams

@Ignacio evet- Karakter setinin harmanlama sırasına sahip olduğunu görmek istiyorum!
kmarsh

Yanıtlar:


31

Bash'da şunları kullanabilirsiniz:

rm FOO1 {3..5}

veya

rm FOO1 {3,4,5}

FOO13, FOO14 ve FOO15 silmek için.

Bash genişletme ayracı burada belgelenmiştir .


2
Hatta rm FOO{13..15}.
Ignacio Vazquez-Abrams

Bu ZSH için de geçerli mi?
Jack


@Jack: bashkomutlar zkabuk komutlarının alt kümesini oluşturur .
abhinavkulkarni

Bu yüzden hem regex hem de globbing sözdizimini öğrenmem gerekiyor . Boohoo. :)
Aditya MP

13

Gelecekteki okuyucular için, findkomut dosyaları da silebilir. Buna benzer bir sorun için karar verdim:

find . -type f -regex '...' -delete

fakat seçilen cevap bu sorunun en basit yanıtıdır.


Seçilen yanıt, yalnızca bir adlandırma kuralını izleyen dosyalar için iyidir. Cevabınız sayesinde, bir dizindeki tüm nesne dosyalarını silebilirim. (benim durumumda yeni gittim find . -name "*.o" -deleteve bir cazibe gibi çalıştı)
John Hamilton

6

ls | grep regex | xargs rm


6
Bunun find -regex ... -print0 | xargs -0 ...için kullanmalısınız , aksi takdirde boşluklu dosya adları için başarısız olur.
sonraki duyuruya kadar duraklatıldı.

1
Tabii ki, eğer kullanacaksanız find, sadece kullanabilirsiniz -exec.
Ignacio Vazquez-Abrams

Benim durumumda dosyaları boşluk vardı ve ayırıcı değiştirme boşluk sorunu giderir: ls | grep regex | xargs --delimiter = '\ n' rm
Anake

1
-1
kötülük

@evilsoup, bu uyarıyı eklemek için +1, ancak dosya adına kim yeni bir satır ekler?
Iulian Onofrei
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.