Bagaimana cara menghapus semua direktori kosong

11

(pada sistem Linux)

Saya memiliki satu set besar subdirektori bersarang pada sistem file. Saya ingin memangkas semua jalur direktori yang tidak mengandung file sama sekali.

Dengan kata lain saya ingin menghapus setiap direktori di mana tidak ada file di direktori itu atau di subdirektori direktori itu secara rekursif.

AndrewR
sumber

Jawaban:

15

Untuk semua versi find

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

Jika Anda memiliki versi yang lebih baru

 find -type d -empty -delete
Mike
sumber
keren, tidak tahu -deletebenderanya.
ansi_lumen
Aku juga tidak. Saya belajar sesuatu yang baru. Saya sudah menulis skrip sebelumnya, menggunakan rekursi untuk menemukan direktori kosong. Ini sangat menyederhanakan tugas itu.
James
2
ya flag -empty sangat membantu di sini. Ini juga berfungsi untuk menemukan file kosong jika Anda tidak menyertakan -type d atau hanya digunakan -type f
Mike
1

Mungkin bukan solusi terbaik, tetapi skrip ini berfungsi:

#!/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

(sebagian didasarkan pada jawaban untuk Daftar semua folder kosong )

AndrewR
sumber
1
Baru saja terpikir oleh saya bahwa ini akan menjadi loop tak terbatas jika Anda tidak memiliki izin untuk menghapus direktori kosong, jadi silakan gunakan jawaban yang diterima sebagai gantinya :)
AndrewR
0
for i in `find -type d -empty`; do rmdir $i; done
ansi_lumen
sumber
Tutup, tapi tidak ada cerutu. Anda kehilangan kasus di mana menghapus direktori menyebabkan orang tuanya menjadi kosong.
Simon Richter
Itu benar. Saya akan findmereka dalam menjalankan kedua. Tidak pernah memiliki kasus ini di kehidupan nyata.
ansi_lumen