Dalam versi Unix yang lama, rm
perintah akan menghapus direktori jika kosong. Dari halaman manual Research Unix Eighth Edition untuk rm : "Jika sebuah entri adalah direktori, itu dihapus hanya jika kosong." Saya suka perilaku ini, jadi saya punya alias ini di /etc/profile
: alias rm='rm -d'
Saya menggunakan versi GNU coreutils rm
, yang -d
memerintahkan rm
untuk melanjutkan dan menghapus direktori jika kosong.
Sejauh ini bagus. Alias ini memungkinkan saya untuk menggunakan rm
seperti dulu. Namun, saya ingin melangkah lebih jauh. saya inginrm
untuk menghapus direktori bahkan jika direktori tersebut berisi direktori lain, selama direktori adalah satu-satunya hal di sana. Tidak masalah seberapa dalam struktur direktori berjalan, selama tidak ada file di sana, cukup kosongkan (begitu Anda sampai ke bawah) direktori, saya ingin rm
menghapus semuanya.
Mungkinkah ini ditulis sebagai alias yang masih berfungsi seperti biasa rm
dan menghapus semua file yang diteruskan ke sana?
rmdir -p
?mkdir -p a/b1/c2 && mkdir -p a/b2/c2; rmdir -p a/b1/c1;
, saya masih tersisa dengan a, a / b2, dan a / b2 / c2. Yang saya inginkan adalah lulus level atas saja (dalam hal ini)rm
, dan menghapus semua yang ada di bawahnya.Jawaban:
Anda ingin melintasi pohon direktori dan melihat apakah itu berisi apa pun selain direktori. Ini di luar
rm
kemampuan. Anda memerlukan alat lain sepertifind
. Anda dapat menghapus direktori kosong di bawah direktori yang diberikan dengan cara ini (-depth
menyebabkan direktori induk yang menjadi kosong juga dihapus):Berikut adalah fungsi yang, untuk setiap argumen, menghapus argumen jika itu adalah file non-direktori atau pohon direktori yang tidak mengandung apa pun selain direktori. Perhatikan bahwa fungsi ini bukan atom: jika salah satu argumen berubah saat sedang berjalan, Anda mungkin berakhir dengan pesan kesalahan, tetapi aman karena tidak akan menghapus non-direktori di dalam direktori yang dilewati sebagai argumen.
sumber