Bagaimana cara saya menghapus semua yang ada di direktori?

25

Bagaimana cara menghapus semua yang ada di direktori, termasuk file dan direktori tersembunyi?

Saat ini, saya menggunakan yang berikut ini:

rm -rf *
rm -rf .*
David Smith
sumber
5
Anda dapat menggabungkannya rm -rf .* *.
pengguna tidak dikenal
2
Anda dapat naik satu direktori dan kemudian jalankanrm -rf yourdirectory/*
shreyansp
1
maaf melewatkan bagian direktori tersembunyi. Solusi pengguna sebelumnya mencakup itu
shreyansp
Opsi kedua yang Anda poskan sangat berbahaya. Ini akan cocok dengan ..direktori, yang akan menghapus apa pun yang ada di direktori di atas .
Richard Peterson

Jawaban:

17

Sederhana dan lurus ke depan:

find -delete 

Termasuk direktori dan file tersembunyi. Setidaknya gnu-find tahu -delete, Anda findmungkin berbeda.

Pengguna tidak diketahui
sumber
1
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.

Chris Quenelle
sumber
7
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.

Catatan yang .*cocok.. .

Gilles 'SANGAT berhenti menjadi jahat'
sumber
5

Dengan asumsi bash 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*

Dengan dotglob diaktifkan, *memperluas ke semua file dan direktori, bahkan yang dimulai dengan .- tetapi tidak diperluas ke .dan .., sehingga aman untuk digunakan rm.

Evilsoup
sumber
2

jika Anda berada di direktori:

cd .. && rm -rf dir && mkdir dir && cd dir

jika tidak:

rm -rf /path/to/dir && mkdir /path/to/dir

David Harris
sumber
2

Ya ampun

rm -rf (.|)*

Sekali lagi, ini hanya untuk Zsh.

phhehehe
sumber
2
Atau *(D)( Dkualifikasi glob mengaktifkan glob_dotsopsi untuk pola ini).
Gilles 'SO- stop being evil'
Atau rm -rf {.,}*(tidak seperti bash, zsh tidak termasuk .dan ..masuk {.,}*, setidaknya di komputer saya).
sasha
1

Bagaimana kalau menggunakan find. Saya pikir ini umumnya pilihan yang baik, ketika Anda harus menggali melalui sub-direktori.

find . -type f -exec rm {} \;
slashdot
sumber
1
ada saklar -delete, sehingga Anda dapat menghapus direktori. (setidaknya di gnu-find).
pengguna tidak dikenal
ini tidak akan menghapus subdirektori
sasha
-2

Coba rm -rf *?*. Ini akan menghapus file normal dan tersembunyi.

Gladimdim
sumber
4
Tidak di shell yang saya tahu.
Gilles 'SANGAT berhenti menjadi jahat'
Anda benar. itu tidak menghapus sub-direktori.
gladimdim
4
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).
Chris Johnsen