Ini adalah one liner yang sangat sederhana:
find Parent -empty -delete
Cukup jelas. Meskipun ketika saya memeriksa saya terkejut bahwa itu berhasil menghapus Parent/Child1. Biasanya Anda mengharapkannya untuk memproses induk sebelum anak kecuali Anda menentukan -depth
.
Ini berfungsi karena -delete
menyiratkan -depth
. Lihat manual pencarian GNU:
-delete
Hapus file; benar jika penghapusan berhasil. Jika penghapusan gagal, pesan kesalahan dikeluarkan. Jika -delete gagal, status keluar find akan menjadi bukan nol (ketika akhirnya keluar). Penggunaan -delete secara otomatis mengaktifkan opsi -depth.
Perhatikan fitur ini bukan bagian dari Standar Posix, tetapi kemungkinan besar akan ada di banyak Distribusi Linux. Anda mungkin memiliki masalah khusus dengan yang lebih kecil seperti Alpine Linux karena didasarkan pada Busybox yang tidak mendukung -empty
.
Sistem lain yang menyertakan -empty
non-standar dan -delete
termasuk BSD dan OSX tetapi ternyata bukan AIX.
Inilah solusi dua perintah
Hapus file kosong
find Parent/ -type f -size 0 -delete
Coba hapus semua direktori
find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>/dev/null
Catatan rmdir
tidak dapat menghapus direktori yang tidak kosong, sehingga aman untuk dijalankan tetapi akan menghasilkan kesalahan, yang kami sembunyikan
Seperti di atas, tetapi sedikit lebih spesifik tentang pesan kesalahan yang diabaikan. Mungkin perlu diubah jika pesan bervariasi antar distro.
find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>&1 \
| grep -iv "Directory not empty$"
Anda juga dapat melakukannya dengan fd
alat:
fd -t e -x rm -r
https://github.com/sharkdp/fd