Yanıtlar:
Yapmaya çalıştığın şey özyinelemeli silme. Bunun için gibi özyinelemeli bir araca ihtiyacınız var find.
find FOLDER -type f -delete
İle bash:
shopt -s globstar ## Enables recursive globbing
for f in FOLDER/**/*; do [[ -f $f ]] && echo rm -- "$f"; done
Burada, genişletilmiş dosya adlarını yinelemek ve yalnızca dosyaları silmek.
Yukarıdakiler kuru çalışmadır, yapılacak değişikliklerden memnun kaldıysanız echo, fiili temizleme için kaldırın :
for f in FOLDER/**/*; do [[ -f $f ]] && rm -- "$f"; done
Sonunda, set globstar:
shopt -u globstar
zshGlob niteleyici kaldıraç ile :
echo -- FOLDER/**/*(.)
(.) glob niteleyicisi, glob açılımlarını sadece normal dosyalarla sınırlar.
Yukarıdakiler, asıl kaldırma için sadece dosya adlarını basacaktır:
rm -- FOLDER/**/*(.)
Sürümünüz finddesteklemiyorsa -delete, geçerli dizindeki ve altındaki her dosyayı silmek için aşağıdakileri kullanabilirsiniz.
find . ! -type d -exec rm '{}' \;
-exec rm {} +özellikle çok sayıda dosya varsa daha hızlı olur.
find . ! -type d -exec rm {} +sym linklerini de kaldırır.
finddesteklemiyorsa -delete, muhtemelen de desteklememektedir -exec ... {} +. Bununla başa çıkmanın önerilen yolu find ... -print0 | xargs -r0 rm(eğer bir çok potansiyel eşleşme bekleniyorsa).
-exec ... {} +POSIX, ancak -deletedeğil. ( -print0Bu arada, ikisi de değil .)
findDestekleyen -print0ancak desteklemeyen en az iki POSIX dışı uygulama ile karşılaştım -exec ... {} +( -deleteolsa da hatırlamıyorum ). Biri OS X’de, diğeri Solaris’te (birkaç yıl önce muhafazakarca güncellenen bir sistemde) vardı. Ayrıca ikame edebilir -print0ile -printf '%p\0'. Neyse, bu Ask Ubuntu ve Unix ve Linux değil ve Ubuntu sonsuza dek GNU bulma özelliğini kullanıyor.