İsimleri belirli bir formla eşleşen tüm dosyaları silmek istiyorsanız, bir joker karakter (glob kalıbı) en basit çözümdür. Bazı örnekler:
$ rm -f abc.log.* # Remove them all
$ rm -f abc.log.2012* # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]* # Remove all files from the first quarter of 2012
Normal ifadeler joker karakterlerden daha güçlüdür; Eğer çıktısını besleyebilir grep
için rm -f
. Örneğin, dosya adlarından "abc.log"
bazıları ile başlayıp bazıları ile başlıyorsa "ABC.log"
, büyük / grep
küçük harfe duyarlı olmayan bir eşleştirme yapmanıza izin verir:
$ rm -f $(ls | grep -i '^abc\.log\.')
Dosya adlarından herhangi biri boşluklar dahil komik karakterler içeriyorsa bu sorunlara neden olur. Dikkatli ol.
Bunu yaptığımda, önce ls | grep ...
komutu çalıştırıyorum ve istediğim çıktıyı üretip üretmediğini kontrol ediyorum - özellikle de şunu kullanıyorsam rm -f
:
$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)
nerede !!
önceki komuta genişler. Veya yukarı-ok veya Ctrl-P yazabilir ve rm -f
komutu eklemek için önceki satırı düzenleyebilirim .
Bu, bash kabuğunu kullandığınızı varsayar. Bazı diğer kabuklar, özellikle csh ve tcsh ve bazı eski sh-türetilmiş kabuklar $(...)
sözdizimini desteklemeyebilir . Eşdeğer backtick sözdizimini kullanabilirsiniz:
$ rm -f `ls | grep -i '^abc\.log\.'`
$(...)
Sözdizimi daha kolay okunmasını ve gerçekten iddialı iseniz o iç içe olabilir.
Son olarak, silmek istediğiniz dosyaların alt kümesi normal bir ifadeyle kolayca ifade edilemiyorsa, sıklıkla kullandığım bir numara, dosyaları geçici bir metin dosyasına listelemek ve ardından düzenlemektir:
$ ls > list
$ vi list # Use your favorite text editor
Daha sonra list
dosyayı manuel olarak düzenleyebilir, yalnızca kaldırmak istediğim dosyaları bırakabilirim ve ardından:
$ rm -f $(<list)
veya
$ rm -f `cat list`
(Yine, bu, dosya adlarından hiçbirinin komik karakterler, özellikle boşluklar içermediğini varsayar.)
Veya list
dosyayı düzenlerken, rm -f
her satırın başına ekleyebilirim ve ardından:
$ . ./list
veya
$ source ./list
Dosyasını düzenleme de gerekli değişen örneğin, tırnak eklemek için bir fırsattır rm -f foo bar
için rm -f 'foo bar'
.