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.