Tüm boş dizinleri nasıl silebilirim


11

(bir Linux sisteminde)

Bir dosya sisteminde büyük bir iç içe alt dizinler kümesi var. Hiç dosya içeren tüm dizin yollarını budamak istiyorum.

Başka bir deyişle, o dizinde veya bu dizinin herhangi bir alt dizininde hiçbir dosyanın bulunmadığı her dizini yinelemeli olarak silmek istiyorum.

Yanıtlar:


15

Tüm bul sürümleri için

find -depth -type d -empty -exec rmdir {} \;

Daha yeni bir sürümünüz varsa

 find -type d -empty -delete

havalı, -deletebayrağı bilmiyordum .
ansi_lumen

Ben de değil. Yeni bir şey öğrendim. Daha önce boş dizinler bulmak için özyineleme kullanarak komut dosyaları yazdım. Bu, bu görevi büyük ölçüde basitleştirir.
James

2
- Boş bayrak gerçekten burada yardımcı oluyor. -Type d'yi veya yalnızca -type f'yi kullanmadıysanız boş dosyaları bulmak için de çalışır
Mike

1

En iyi çözüm olmayabilir, ancak bu komut dosyası çalışır:

#!/bin/sh

while true
do
    DIRS=`find . -xdev -type d -exec find {}  -maxdepth 0 -empty  \;`
    if [ -z "$DIRS" ]; then
        exit 0
    else
        echo $DIRS | xargs rmdir
    fi
done

(kısmen tüm boş klasörleri listele cevabını temel alır )


1
Boş dizinlerden herhangi birini kaldırma izniniz yoksa, bunun sonsuz bir döngüye gireceği bana geldi, bu yüzden lütfen bunun yerine kabul edilen cevabı kullanın :)
AndrewR

0
for i in `find -type d -empty`; do rmdir $i; done

Yakın, ama puro yok. Bir dizini kaldırmanın üst dizininin boş olmasına neden olduğu durumu kaçırıyorsunuz.
Simon Richter

Bu doğru. findOnları ikinci turda yapardım . Bu davayı gerçek hayatta hiç yaşamadım.
ansi_lumen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.