Untuk menghindari menghapus direktori, gunakan find /path -delete -mindepth 1.
orodbhen
@orodbhen: find -delete tidak akan menghapus direktori, tempat Anda menjalankan perintah (seperti pada pertanyaan dengan rm).
pengguna tidak diketahui
11
Jawaban terbaik adalah: Jangan lakukan itu. Hapus direktori itu sendiri secara rekursif, lalu buat ulang sebagai direktori kosong. Lebih dapat diandalkan dan lebih mudah bagi orang lain untuk memahami apa yang Anda coba lakukan. Ketika Anda membuat ulang direktori, direktori tersebut mungkin memiliki pemilik, grup, dan izin yang berbeda. Jika itu penting, berhati-hatilah. Juga, jika ada program yang berjalan memiliki file terbuka menangani (deskriptor) pada direktori maka Anda tidak ingin menghapusnya. Jika tidak ada kasus khusus yang berlaku, maka lebih mudah untuk menghapus seluruh direktori.
Jadi bagaimana itu lebih mudah. 'Hati-hati' bukanlah jawaban. Saya tidak akan mengerti mengapa seseorang menghapus direktori dan membangunnya kembali.
pengguna tidak dikenal
Saya menambahkan frasa "sebagai direktori kosong", mungkin itu lebih jelas.
Chris Quenelle
2
Tidak, itu tidak menjelaskan mengapa Anda menghapus direktori dan membuatnya kembali. Ke hal-hal untuk dipertimbangkan milik, btw., Tanggal / waktu penciptaan juga
pengguna tidak diketahui
2
Jika direktori itu adalah direktori kerja saat ini dari beberapa proses, Anda mungkin mengalami masalah. Juga, jika Anda menghapus direktori, Anda menghapus informasi tentang izin dan kepemilikannya.
8
rm -rf --*.[!.]*..?*
Masing-masing dari ketiga pola itu berkembang sendiri jika tidak cocok dengan apa pun, tapi itu bukan masalah di sini karena kami ingin mencocokkan semuanya dan rm -fmengabaikan argumen yang tidak ada.
Dengan dotglob diaktifkan, *memperluas ke semua file dan direktori, bahkan yang dimulai dengan .- tetapi tidak diperluas ke .dan .., sehingga aman untuk digunakan rm.
Masalahnya lebih cenderung adalah bahwa *?*tidak akan cocok dengan "dot" file / dirs (kecuali jika Anda telah mengaktifkan dotglobopsi di bash , GLOB_DOTSopsi di zsh , atau setara dengan shell apa pun yang Anda gunakan).
rm -rf .* *
.rm -rf yourdirectory/*
..
direktori, yang akan menghapus apa pun yang ada di direktori di atas .Jawaban:
Sederhana dan lurus ke depan:
Termasuk direktori dan file tersembunyi. Setidaknya gnu-find tahu
-delete
, Andafind
mungkin berbeda.sumber
find /path -delete -mindepth 1
.Jawaban terbaik adalah: Jangan lakukan itu. Hapus direktori itu sendiri secara rekursif, lalu buat ulang sebagai direktori kosong. Lebih dapat diandalkan dan lebih mudah bagi orang lain untuk memahami apa yang Anda coba lakukan. Ketika Anda membuat ulang direktori, direktori tersebut mungkin memiliki pemilik, grup, dan izin yang berbeda. Jika itu penting, berhati-hatilah. Juga, jika ada program yang berjalan memiliki file terbuka menangani (deskriptor) pada direktori maka Anda tidak ingin menghapusnya. Jika tidak ada kasus khusus yang berlaku, maka lebih mudah untuk menghapus seluruh direktori.
sumber
Masing-masing dari ketiga pola itu berkembang sendiri jika tidak cocok dengan apa pun, tapi itu bukan masalah di sini karena kami ingin mencocokkan semuanya dan
rm -f
mengabaikan argumen yang tidak ada.Catatan yang
.*
cocok..
.sumber
Dengan asumsi bash 4+:
Dengan dotglob diaktifkan,
*
memperluas ke semua file dan direktori, bahkan yang dimulai dengan.
- tetapi tidak diperluas ke.
dan..
, sehingga aman untuk digunakanrm
.sumber
jika Anda berada di direktori:
cd .. && rm -rf dir && mkdir dir && cd dir
jika tidak:
rm -rf /path/to/dir && mkdir /path/to/dir
sumber
Ya ampun
Sekali lagi, ini hanya untuk Zsh.
sumber
*(D)
(D
kualifikasi glob mengaktifkanglob_dots
opsi untuk pola ini).rm -rf {.,}*
(tidak seperti bash, zsh tidak termasuk.
dan..
masuk{.,}*
, setidaknya di komputer saya).Bagaimana kalau menggunakan
find
. Saya pikir ini umumnya pilihan yang baik, ketika Anda harus menggali melalui sub-direktori.sumber
Coba
rm -rf *?*
. Ini akan menghapus file normal dan tersembunyi.sumber
*?*
tidak akan cocok dengan "dot" file / dirs (kecuali jika Anda telah mengaktifkandotglob
opsi di bash ,GLOB_DOTS
opsi di zsh , atau setara dengan shell apa pun yang Anda gunakan).