Cara menghapus file dan direktori dengan cepat melalui terminal (bash shell) [ditutup]

331

Dari jendela terminal:

Ketika saya menggunakan rmperintah itu hanya dapat menghapus file.
Ketika saya menggunakan rmdirperintah itu hanya menghapus folder kosong.

Jika saya memiliki direktori yang bersarang dengan file dan folder di dalam folder dengan file dan sebagainya, apakah ada cara untuk menghapus semua file dan folder tanpa semua mengetik perintah yang berat?

Jika ada bedanya, saya menggunakan mac bash shell dari terminal, bukan Microsoft DOS atau linux.

baduker
sumber
Jika Anda ingin mengembalikan file di masa depan, jangan gunakan "rm" untuk kasus seperti itu. Gunakan "rm-trash": github.com/nateshmbhat/rm-trash
Natesh bhat

Jawaban:

761
rm -rf some_dir

-r "rekursif" -f "force" (menekan pesan konfirmasi)

Hati-hati!

Jim Lewis
sumber
27
+1 dan senang Anda menambahkan "Hati-hati!" bagian ... pasti perintah "Sawzall" yang dapat dengan cepat mengubah hari yang baik menjadi hari yang buruk .. jika digunakan dengan sembarangan.
itsmatt
5
seperti jangan lakukan "# rm -rf /" Anda akan menyesal bahwa:
DarthVader
1
@itsmatt: Anda tahu apa yang mereka katakan ... berikan seseorang Sawzall, dan tiba-tiba setiap masalah tampak seperti jam yang menyenangkan!
Jim Lewis
164
Di Mac? Lakukan ini sebagai gantinya: brew install trashmaka trash -rf some_dirini akan memindahkan direktori yang tidak diinginkan ke trashbin Anda alih-alih hanya menghilangkan gaya- Prestise ke eter. ( sumber )
zakdances
4
Pendekatan "sampah" hebat!
anopres
59
rm -rf *

Akan menghapus semuanya (folder & file) di direktori saat ini.

Tetapi berhati-hatilah! Hanya jalankan perintah ini jika Anda benar-benar yakin, bahwa Anda berada di direktori yang benar.

Prine
sumber
17
rm -rf adalah perintah yang sangat berisiko, Anda harus selalu berhati-hati dan menentukan folder yang akan dihapus.
eomeroff
8
Bagaimana kalau berjalan ls -R *dulu untuk melihat apa yang akan dihapus olehrm -rf *
Hammad Khan
Ini berfungsi baik untuk saya, terima kasih.
Monica Hübner
14

Ya ada. The -rpilihan memberitahu rmmenjadi r ecursive, dan menghapus seluruh hirarki file berakar pada argumen; dengan kata lain, jika diberi direktori, itu akan menghapus semua isinya dan kemudian melakukan apa yang secara efektif rmdir.

Dua opsi lain yang harus Anda ketahui adalah -idan -f. -isingkatan dari i nteractive; itu rmmeminta Anda sebelum menghapus setiap file. -fsingkatan f orce; itu berjalan di depan dan menghapus semuanya tanpa bertanya. -ilebih aman, tetapi -flebih cepat; gunakan saja jika Anda benar - benar yakin telah menghapus hal yang benar. Anda dapat menentukan ini dengan -ratau tidak; ini merupakan pengaturan independen.

Dan seperti biasa, Anda dapat menggabungkan switch: rm -r -iis just rm -ri, and rm -r -fis rm -rf.

Perhatikan juga bahwa apa yang Anda pelajari berlaku bashpada setiap OS Unix: OS X, Linux, FreeBSD, dll. Faktanya, rmsintaksisnya sama dalam hampir semua shell pada setiap OS Unix. OS X, di bawah tenda, sebenarnya adalah sistem BSD Unix.

Antal Spector-Zabusky
sumber
1
Meskipun semua opsi yang disebutkan di atas adalah standar di antara semua rasa Unix yang terdaftar, ada beberapa perbedaan juga. Misalnya, OS X (tetapi bukan Linux) memiliki "rm -d", yang menghapus file atau direktori kosong. Namun, +1 untuk poin bahwa OS X adalah BSD secara internal.
David Gelhar
Benar --- subset POSIX (hampir) dijamin untuk bekerja secara konsisten di seluruh Unixen, tetapi apa pun di luar yang mungkin atau mungkin tidak.
Antal Spector-Zabusky
2

Jadi saya mencari-cari cara untuk menghapus semua file dalam direktori kecuali untuk beberapa direktori, dan file, saya ingin menyimpannya. Setelah banyak pencarian saya menemukan cara untuk melakukannya menggunakan find.

find -E . -regex './(dir1|dir2|dir3)' -and -type d -prune -o -print -exec rm -rf {} \;

Pada dasarnya ia menggunakan regex untuk memilih direktori untuk dikecualikan dari hasil kemudian menghapus file yang tersisa. Hanya ingin meletakkannya di sini kalau-kalau ada orang lain yang membutuhkannya.

msantoro12
sumber