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.

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

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 )


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.