2013-09-23 25 views
5

rm kullanarak ve dizinin kendisini bir komut dosyasında silmeden bir dizindeki dosyaları kaldırmaya çalışıyorum. Gördüğüm örnekler sadece bunu dizinde yaparken yapar ve ben de oraya gitmeden bunu yapmak isterim. Bash Wildcard kullanımı

Ben
rm "$(dirname $1)/filetokeep/*" 

denedik ama çalışmıyor. Herhangi bir yardım?

+0

Neden 'dirname $ 1'? – user567879

+0

a .sln dosyası, diziniyle aynı ada sahip olarak iletildi – user2805565

cevap

6

Joker karakterin kullanılması genişletmeyi engeller. Kullanılması --

rm -- "$(dirname -- "$1")/filetokeep"/* 

değerleri pozisyonel olanları (dizin bir - ile $1 başlar adlandırılmış ise işler hala çalışır böylece) yerine isteğe bağlı argümanlar olarak yorumlanamaz sağlar.

+0

Teşekkürler, yeni bash. Bir sürü şey deniyordum, aşırı tırnak kullanıyormuşum gibi görünüyor. Orijinal girişimde alıntıları kaldırmak da işe yarıyor. – user2805565

+0

@ user2805565 Alıntıların tamamının kaldırılması hatalara neden olur; Sadece onları son karakterden çıkarmak istersiniz. –

+1

... aslında, "rm" $ (dirname "$ 1")/filetokeep "/ *" olması gerektiği gibi olmalıdır ($ 1' etrafında iç tırnaklar - '$()' yeni bir alıntı içeriği yaratır, Yani bu gerçekten verilen gibi çalışır. –