A ile başlayan ve 2 sayıyla biten dosyaları silmeye çalıştım ama bir şey yapmıyor.
Ne denedim:
rm ^A*[0..9]2$
Ben nerde hatalıyım?
A ile başlayan ve 2 sayıyla biten dosyaları silmeye çalıştım ama bir şey yapmıyor.
Ne denedim:
rm ^A*[0..9]2$
Ben nerde hatalıyım?
Yanıtlar:
Kriterlerinize uyan tüm dosyaları silmek için aşağıdaki komutu kullanabilirsiniz:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm
Nasıl çalışır:
ls tüm dosyaları listeler (sonuç yayınlandığından satır satır sıralanır).
grep -P "^A.*[0-9]{2}$" dosyaların listesini filtreler ve yalnızca normal ifadeyle eşleşen dosyaları bırakır ^A.*[0-9]{2}$
.*oluşunda herhangi bir sayıda gösterir ., .bir joker eşleme daha karakterdir.
[0-9]{2}tam olarak iki [0-9]sayı olduğunu gösterir , yani herhangi bir rakam
xargs -d"\n" rmona aktarılan rm lineher kişi için bir kez çalıştırır line.
Ben nerde hatalıyım?
Yeni başlayanlar için, rmnormal bir ifadeyi argüman olarak kabul etmiyor. Jokerin yanı sıra, *diğer tüm karakterlere kelimenin tam anlamıyla davranılır.
Ayrıca, normal ifadeniz biraz kapalı. Örneğin, *tüm örneklerini anlamına ...normal ifadede, bu yüzden A*maçlar A, AAvb ve hatta boş bir dize.
Daha fazla bilgi için Regular-Expressions.info adresini ziyaret edin .
-d"\nAnahtar alanları sorununu giderir.
grep -P(Perl regex) yoktur. grep -Ebu durumda çalışabilir.
-Iile xargsilk öldürücü olmayan komutlarıyla daima testi:xargs -d"\n" -I {} echo "{}"
ls? Bkz bu soruyu işaret bu makalede . Tuzaklar yüzünden rmistemediğin şeyi yapabilirsin.
Veya kullanarak find:
find your-directory/ -name 'A*[0-9][0-9]' -delete
Bu çözüm garip dosya isimleri ile ilgilenecektir .
-type f
xargsyaklaşımını kullanabilirsiniz rm -f.
Bkz dosya genişletme bash adam sayfasının bölümüne:
rm A*[0-9][0-9]
Regexp ile olan çözüm 200 kat daha iyidir, hatta komutu kullanmadan önce hangi dosyanın silineceğini görseniz bile, son boruyu kesin:
ls | grep -P "^A.*[0-9]{2}$"
O zaman doğru ise, sadece kullanın:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d "\n" rm
Bu 200 kat daha iyidir çünkü Unix ile çalışıyorsanız, grep'in nasıl kullanılacağını bilmek önemlidir. Nasıl kullanılacağını biliyorsanız çok güçlü.
find komut regexes ile de çalışır.
Hangi dosyaların silineceğini kontrol edin
find . -regex '^A.*[0-9]{2}$'
Dosyaları sil
find . -regex '^A.*[0-9]{2}$' -delete