Anda telah menghapus (hampir) semua direktori home Anda!
rm -r something
secara rekursif menghapus file dan direktori dalam / di bawah sesuatu ; itu hanya akan gagal pada item yang tidak memiliki izin untuk dihapus, baik karena mereka dimiliki oleh pengguna yang berbeda (misalnya root
), atau karena mereka sedang digunakan (misalnya mount GVFS).
Jika Anda tidak menambahkan -f
(seperti pada, rm -rf something
), Anda akan mendapatkan sesuatu seperti:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
Pada titik ini Anda dapat membatalkan dan kemudian menyadari bahwa Anda telah menjalankan perintah yang salah.
Saran dari masyarakat tentang cara menghindari kecelakaan semacam itu
Catatan: Komunitas wiki, semua orang silakan berkontribusi.
Untuk beberapa file, gunakan -i
opsi untuk mendapatkan konfirmasi tentang menghapus file atau direktori:
$ rm -ri something/
rm: remove regular file ‘something/file~’? y
rm: descend into directory ‘something’? y
rm: remove regular file ‘something/file’? y
rm: remove directory ‘something’? y
Jika menghapus dari direktori saat ini, awali dengan ./
untuk menghindari kesalahan menghapus lokasi yang berbeda .:
$ cd something
$ rm -v ./*~
removed ‘./file~’
Di atas adalah untuk menunjukkan penggunaan ./
. Jika ada subdirektori, tentu saja Anda dapat menggunakannya rm -v something/*~
juga. Hati-hati : jangan berpikir bahwa rm ./.*
menghapus semua file tersembunyi di direktori saat ini. Lihat pertanyaan Serverfault ini untuk pemecahan masalah pada file tersembunyi yang digulung.
Pindahkan daripada menghapus: Daripada menghapus file secara rekursif di tempat pertama saya terbiasa memindahkan file yang ingin saya singkirkan di tempat lain sebelum akhirnya saya menghapusnya. Jika terjadi kesalahan, mudah dipulihkan.
mv -b SOURCE DEST
Gunakan find
(mungkin dengan grep
) untuk melihat pratinjau jika Anda ingin menghapus file yang dipilih secara rekursif. Anda harus mencoba membuat ini suatu kejadian yang jarang, tetapi jika Anda harus ...
find
tanpa argumen secara rekursif mendaftar semua file / direktori di bawah yang sekarang. Anda harus mencoba mencari man find
cara membuatnya selektif (harta karun), tetapi jika Anda tidak ingin repot, Anda bisa menggunakan familiar grep
untuk memfilter file yang ingin Anda hapus.
- Misalkan saya adalah peretas kernel uber-l33t, dan saya terganggu oleh beberapa KB "contoh" file di pohon sumber saya; Saya ingin menghapus semua file yang berisi nama itu. Jadi saya ketik
find | grep example
, yang memberi saya 20 file ini. Itu terlihat bagus, jadi saya sekarang pergi dan menghapus file-file yang tepat, bersama dengan rm -v
output verbose yang disebutkan sebelumnya, melalui xargs
:
temukan | grep example | xargs rm -v
yang memberi saya hasil ini. Pratinjau seperti mencegah masalah di mana mengatakan, Anda membuat kesalahan ketik dan sample
bukan example
.
Solusi di atas tidak boleh digunakan jika Anda mungkin memiliki nama file yang mengandung spasi, karakter tab, baris baru, atau tanda kutip ( "
atau '
), karena ini akan menyebabkan xargs
kegagalan, atau memberi makan rm
dengan nama file yang tidak lengkap, yang dalam kasus terburuk bisa berakhir dengan menghapus yang salah file. Cara aman untuk melakukan hal di atas adalah melakukan semuanya dengan find
operator dan tindakan.
Berikut ini akan menampilkan semua file yang berisi kata example
find . -name "*example*"
Jika daftar itu adalah file yang ingin Anda hapus, gunakan -exec
tindakan untuk meneruskan file rm
.
find . -name "*example*" -exec rm -v {} +
Lihat Menggunakan Temukan untuk bantuan lebih lanjut tentang penggunaan find
.