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" rm
ona aktarılan rm line
her kişi için bir kez çalıştırır line
.
Ben nerde hatalıyım?
Yeni başlayanlar için, rm
normal 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
, AA
vb ve hatta boş bir dize.
Daha fazla bilgi için Regular-Expressions.info adresini ziyaret edin .
-d"\n
Anahtar alanları sorununu giderir.
grep -P
(Perl regex) yoktur. grep -E
bu durumda çalışabilir.
-I
ile xargs
ilk ö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 rm
istemediğ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
xargs
yaklaşı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