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
zsh
Glob 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 find
desteklemiyorsa -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.
find
desteklemiyorsa -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 -delete
değil. ( -print0
Bu arada, ikisi de değil .)
find
Destekleyen -print0
ancak desteklemeyen en az iki POSIX dışı uygulama ile karşılaştım -exec ... {} +
( -delete
olsa 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 -print0
ile -printf '%p\0'
. Neyse, bu Ask Ubuntu ve Unix ve Linux değil ve Ubuntu sonsuza dek GNU bulma özelliğini kullanıyor.