Perintah rmdir Linux: hapus direktori kosong dan batasi induknya
Perintah rmdir menghapus direktori yang kosong, tetapi menolak direktori yang masih berisi file, termasuk file tersembunyi, atau subdirektori. Gunakan untuk membersihkan jalur kosong; penghapusan seluruh isi dengan rm -r memiliki cakupan berbeda.
Contoh-contoh menggunakan perilaku GNU Coreutils. Periksa rmdir --help, man rmdir, dan dokumentasi distribusi Anda ketika portabilitas atau opsi spesifik versi penting.
Apa Itu Perintah rmdir?
Direktori kosong berarti tidak ada entri selain . dan ... rmdir tidak menghapus file biasa dan tidak menelusuri isi untuk menghapusnya. Pada Linux, penghapusan juga memerlukan izin tulis pada direktori induk serta penelusuran pada prefiks jalurnya; direktori yang kosong belum tentu boleh dihapus oleh pengguna saat ini.
Sintaks Dasar
rmdir [OPSI]... DIREKTORI...
Kutip jalur yang berisi spasi, seperti rmdir 'arsip lama'. Pada GNU, gunakan rmdir -- -arsip untuk nama yang diawali tanda hubung. Periksa versi dengan rmdir --version dan pastikan jalur yang dipilih memang boleh dihapus.
Penggunaan Dasar rmdir
Hapus satu direktori kosong
Jalankan latihan dalam direktori sementara baru milik Anda, misalnya masuk dengan cd ke direktori hasil mktemp -d. Buat target latihan dengan mkdir old-cache, lalu jalankan perintah berikut. Direktori hanya dihapus jika kosong.
rmdir old-cache
Hapus beberapa direktori kosong
Siapkan tiga direktori kosong dengan mkdir empty-a empty-b empty-c. Setiap operand diproses sesuai urutan; sebagian dapat berhasil walaupun yang lain gagal. Status bukan nol tidak membatalkan penghapusan yang sudah berhasil, jadi periksa diagnostik serta jalur yang tersisa.
rmdir empty-a empty-b empty-c
Hapus direktori induk yang kosong
Untuk latihan, buat jalur baru dengan mkdir -p a/b/c. Perintah di bawah mencoba a/b/c, lalu a/b, kemudian a. Setiap direktori hanya dapat dihapus setelah kosong. Induk yang masih berisi data menyebabkan kegagalan, sementara anak yang telah dihapus tidak dipulihkan.
rmdir -p a/b/c
Memeriksa hasil penghapusan direktori yang kosong
rmdir tidak menampilkan pesan apa pun saat menghapus direktori yang kosong. Terapkan contoh di bawah ini hanya untuk target yang dibuat sementara.
mkdir empty-demo &&
rmdir empty-demo &&
test ! -e empty-demo
printf '%s\n' "$?"
Di direktori latihan yang dapat diakses, keluaran 0 berarti pembuatan, penghapusan, dan pemeriksaan tersebut berhasil. Operator && menghentikan rangkaian jika langkah sebelumnya gagal; printf langsung menampilkan status rangkaian. Pada jalur yang tidak dapat diakses atau berubah oleh proses lain, hasil test ! -e saja bukan bukti menyeluruh bahwa penghapusan berhasil.
Opsi utama
| Opsi | Tujuan |
|---|---|
-p, --parents |
Hapus direktori dan komponen induk yang kosong. |
-v |
Laporkan setiap direktori yang sedang diproses. |
--ignore-fail-on-non-empty |
Abaikan kegagalan karena direktori tidak kosong, baik diagnostik maupun pengaruhnya pada status keluar. |
Opsi panjang sering membuat skrip yang ditinjau lebih mudah dipahami. Ketika skrip harus dijalankan di sistem non-GNU, verifikasi setiap opsi non-POSIX di platform target.
Dengan GNU rmdir --ignore-fail-on-non-empty -- cache-dir, direktori yang masih berisi data dapat tetap ada walaupun statusnya 0. Opsi ini tidak mengabaikan semua penyebab kegagalan, misalnya nama yang tidak ada atau masalah izin.
Contoh praktis
Periksa apakah direktori benar-benar kosong
ls biasa tidak menampilkan nama yang diawali titik. Setelah latihan pertama menghapus old-cache, buat ulang dengan mkdir old-cache dan tambahkan touch old-cache/.keep. Periksa isinya sebagai berikut.
ls -la old-cache
find old-cache -mindepth 1 -maxdepth 1 -print
find menampilkan old-cache/.keep; ls -la juga menampilkan entri . dan ... Jika Anda mencoba rmdir old-cache sekarang, perintah gagal dan .keep tetap ada. Pemeriksaan ini membaca nama pada satu saat; rmdir tetap memeriksa kondisi saat benar-benar mencoba penghapusan.
Bersihkan hanya saat kosong
Untuk jalur tetap cache-dir di direktori latihan, simpan contoh berikut sebagai bersihkan-cache.sh, lalu jalankan sh bersihkan-cache.sh. Buat cache-dir yang kosong terlebih dahulu jika ingin mengamati cabang berhasil. Skrip mempertahankan diagnostik asli dan mengembalikan status gagal jika penghapusan tidak berhasil.
#!/bin/sh
if rmdir -- cache-dir; then
printf '%s\n' 'Direktori cache kosong telah dihapus.'
else
status=$?
printf 'Direktori cache tidak dihapus (status %s).\n' "$status" >&2
exit "$status"
fi
Pada cabang berhasil, keluaran adalah Direktori cache kosong telah dihapus. Jika data masih ada, direktori dipertahankan dan status bukan nol dilaporkan. Jika kebijakan tugas memang menerima direktori yang tidak kosong, pertimbangkan opsi GNU khusus di atas; jangan menyembunyikan semua kesalahan dengan mengalihkan seluruh diagnostik ke /dev/null.
Laporkan pembersihan induk
Siapkan latihan terpisah dengan mkdir -p build/tmp/session. Gabungkan -p dan -v untuk melihat pemrosesan jalur. Periksa status dan keberadaan jalur setelahnya; pesan verbose tidak menggantikan pemeriksaan kegagalan.
rmdir -pv build/tmp/session
Jika seluruh jalur kosong, ketiga direktori dapat terhapus. Jika build harus dipertahankan, sebutkan hanya rmdir -- build/tmp/session build/tmp tanpa -p. Urutan anak sebelum induk membuat build/tmp dapat kosong terlebih dahulu; hanya nama yang Anda sebutkan yang dicoba.
Perintah rmdir dan Terkait
| Perintah atau metode | Peran utama | Penggunaan yang sesuai |
|---|---|---|
rmdir |
Hapus hanya direktori kosong | Mempertahankan jalur apa pun yang masih memiliki data |
rm -d |
Hapus direktori kosong dengan GNU rm | Operasi file campuran |
rm -r |
Hapus pohon direktori secara rekursif | Penghapusan semua isi secara sengaja |
find ROOT -mindepth 1 -type d -empty -delete |
Dengan GNU find, hapus hanya direktori kosong di bawah ROOT; pertahankan ROOT | Pembersihan pohon dengan batas awal dan tipe yang jelas |
Pada contoh tabel, ganti ROOT dengan direktori awal yang sudah diperiksa. -type d mencegah pencocokan file kosong dan -mindepth 1 melindungi direktori awal dari aksi penghapusan. -delete memakai urutan dari anak ke induk, sehingga induk yang baru menjadi kosong juga dapat terhapus. Untuk memeriksa calon yang kosong saat ini, gunakan -depth serta ganti aksi -delete dengan -print terlebih dahulu; daftar itu tidak menjamin semua induk yang kelak menjadi kosong akan sudah terlihat.
Peringatan Penting
File tersembunyi dihitung sebagai isi
File seperti .keep dan .gitignore membuat direktori tidak kosong.
-p mungkin mencapai lebih tinggi dari yang diharapkan
Jika setiap induk kosong, beberapa tingkat dapat dihapus. Pilih batas pembersihan sebelum menjalankan perintah.
Kegagalan bisa menjadi informasi yang berguna
Kegagalan karena direktori tidak kosong berarti ada isi yang perlu diperiksa. Penyebab lain pada Linux meliputi izin induk atau penelusuran, pembatasan sticky bit yang membatasi siapa boleh menghapus entri pada direktori bersama, titik mount yang sedang dipakai, atau sistem file hanya-baca. Jangan menganggap semua pesan gagal berarti isi harus dihapus.
FAQ
Bisakah rmdir menghapus direktori yang berisi file?
Tidak. Gunakan rm -r yang telah ditinjau dengan hati-hati hanya ketika semua isi harus dihapus.
Mengapa direktori yang tampaknya kosong gagal dihapus?
Mungkin berisi entri tersembunyi, merupakan titik mount, atau memiliki masalah izin.
Bagaimana cara menghapus induk yang kosong juga?
Gunakan rmdir -p PATH. Setiap tingkat harus kosong.
Apakah rmdir lebih aman daripada rm -r?
Ini lebih membatasi karena menolak direktori yang tidak kosong, tetapi jalur target tetap harus diverifikasi.
Dokumentasi resmi
Referensi perintah Linux menurut tugas (bahasa Inggris) memberi konteks pengelolaan file dan direktori lainnya.




