GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa secara rekursif menghapus semua file dan direktori kosong di Linux?

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


Linux
  1. Cara Menghapus File dan Direktori di Linux dari Command Line

  2. Cara Menemukan File Di Linux Di Semua Direktori Secara Rekursif

  3. Cara mendaftar semua file dan direktori secara rekursif

  1. Bagaimana saya bisa melihat ukuran file dan direktori di linux?

  2. Temukan dan hapus semua direktori bernama test di linux

  3. bagaimana saya bisa menghapus direktori kosong secara rekursif di direktori home saya?

  1. Linux Hapus File dan Direktori

  2. Cara Menemukan dan Menghapus Direktori dan File Kosong di Unix

  3. Cara Menemukan dan Menghapus Direktori dan File Kosong di Linux