Evet, rm *.xvg
yalnızca .xvg
geçerli dizinde biten dosyaları siler . İşte nedeni.
Bunun gibi bir komut yazdığınızda, iş kullandığınız kabuk (bash varsayalım) ile komut ikili arasında bölünür.
İkili harfleri yazarak bulabilirsiniz which rm
. Bu küçük program, dosya bağlantılarını kaldırma ilgilenir. Bu gibi programlar komut satırından başlatılabilir ve başlatıldığında bir argüman listesini okuyabilir prog arg1 arg2 arg3
. Bu durumda, rm
silinecek tam nitelikli dosya adlarının bir listesi olarak yorumlanırlar. Bu nedenle, dosyayı içeren bir dizindeyseniz foo.bar
, yazarak delete 'foo.*'
sonuçlanır rm: foo.*: No such file or directory
. Dosya deseninin etrafındaki tek tırnak işaretlerine dikkat edin, kabuğa, argümanı olduğu gibi iletmesini söylerler.
Ancak rm *.bar
aynı dizinde yazarsanız dosyayı silecektir. Burada olan, komutları yazmak için kullandığınız program olan kabuğunuzun, argümanları komuta vermeden önce bazı dönüşümler gerçekleştiriyor olmasıdır. Bunlardan birine 'dosya adı genişletme' denir, aksi halde 'globbing' olarak bilinir. Burada bash dosya adı genişletmelerinin bir listesini görebilirsiniz . En yaygın genişletmelerden biri *
, geçerli dizindeki dosya adlarına genişletilmiştir.
İş yerindeki dünyaya bakmanın basit bir yolu echo
, ona kabuktan geçen tüm argümanları geri basan kullanmaktır . Böylece echo *
aynı dizinde yazarak çıkacaktır foo.bar
. Yani yazdığınızda rm *.bar
, aslında olan, kabuğun argüman listesini genişlettiği ve foo.bar
ardından bunu rm
komuta ilettiğidir.
Kürelemeyi kontrol etmenin bazı yolları vardır. Örneğin bash'ın son sürümlerinde, tekrarlayan genişleme yapacak globstar adlı bir seçeneği açabilirsiniz. Yazma echo **/*.bar
, .bar
tüm alt klasörlerde biten tüm dosyaların bir listesini gösterir . Bu yüzden rm **/*.bar
globstar etkinleştirilmiş bash yazmak , alt klasörlerdeki eşleşen tüm dosyaları tekrar tekrar silecektir.
rm -f {*.xvg,.*.xvg}
Gizli dosyaları da kaldırmak için. Verm -R -f {*.xvg,.*.xvg}
ayrıca dizinleri kaldırmak için.