2011-05-10 28 views
29

Bir dizinde yüzlerce dizin ve dosya var.Yalnızca dizinleri silme ve dosyaları el değmeden kaldırma izni var

, (dizinleri içinde bir şey varsa veya sadece hepsini silmek değilse olursa olsun)

Şu anda ls -1 -d */ kullanın ve bir dosyada bunları kaydetmek ve sed yaptığım tek dizinleri silme en iyi yolu nedir ve sonra çalıştırın. Oldukça uzun bir yol.

find /path -d -type d 

çıktı sonra, aklı başında görünüyor emin olmak için:

find /path -d -type d -exec rm -rf '{}' \; 

-type d sonra, sadece dizinleri için -d görünüyor sadece dizinleri

cevap

-13

:

rm -R `ls -1 -d */` 

(backquotes)

+5

Çıkışı 'ls'den basmayın; ** özellikle ** rm -r'ye değil. Yol adları boşluk içerdiğinde başarısız olur. –

+1

Uzay konusunu dikkate almadı. Bunu hatırlayacak. –

+0

Bu y/n sorular atlamak için en iyi yanıt – Asim

10

Birincisi, koşmak silme iyi bir yol arıyorum Ebeveynlerden önce çocuk dizinleri koyduğunuzdan emin olur. Bir satırda

+0

İlk komut benim için bile çalışmıyor. > bulmak. -d -type -d bul: uyarı: -d seçeneği kullanımdan kaldırılmıştır; lütfen yerine -depth kullanın, çünkü bu POSIX uyumlu bir özelliktir. find: geçersiz argüman -d için – Anthony

+1

@Anthony'de fazladan bir tire var. Bul/path -d -type d ' – csvan

+1

@csvan lol olmalıdır. vay. sadece vay. – Anthony

111

Bu, çok basit olmasına benim için çalışıyor: o zaman

rm -r */ 
+4

olarak kabul edilmemelidir: Bir komut dosyası bu kullanırken yıldız tırnak içinde genişlemez olarak rm-rf */ –

+1

, zihin genişleme tutun. Olduğu gibi, iyi çalışması gerekir. http://unix.stackexchange.com/questions/156534/bash-script-error-with-strings-with-paths-that-have-spaces-and-wildcards –

12

find . -maxdepth 1 -mindepth 1 -type d

find . -maxdepth 1 -mindepth 1 -type d -exec rm -rf '{}' \;

+1

bu kod ek bağlam sağlayan sorusunun yanıtını rağmen _why_ ilgili ve/veya soru önemli ölçüde uzun vadeli değerini artıracak cevaplar _how_. Lütfen bazı açıklama eklemek için cevabınızı [düzenleyin]. –

İlgili konular