gedit membuat file cadangan tersembunyi yang diakhiri dengan '~'. Saya ingin melakukan pembersihan rekursif dari pohon direktori saya.
Perintah rm *~
akan menghapus semua file lokal yang diakhiri dengan '~'
Saya pikir rm -r *~ .
akan menghapus semua file di seluruh pohon, tapi saya salah ketik rm -r ~
.
Ada pesan beberapa direktori tidak dapat dihapus dan saya keluar dari perintah. Pertanyaannya adalah: Apa yang telah saya hapus?
Saya memang memperhatikan bahwa konfigurasi Filezilla saya hilang. Apakah perintah ini menghapus semua direktori tersembunyi dari direktori home?
command-line
bash
GUI Junkie
sumber
sumber
-r
kecuali saya ingin menyingkirkan semuanya.rm -r *~ .
akan menghapus semua file dan folder (dalam direktori saat ini) yang cocok*~
atau.
. (.
akan diabaikan olehrm
sebagai pengecualian khusus, karena kebanyakan orang tidak ingin secara rekursif menghapus direktori saat ini.*~
Menghapus semua file dan direktori dalam direktori saat ini yang berakhir dengan~
, tetapi bukan file dan direktori dalam subdirektori dari direktori saat ini. ) Jadi bukan itu yang Anda inginkan. Anda mungkin akan ingin menggunakanfind
dengan-exec
bendera untuk tampilan secara rekursif melalui pohon direktori dan non-rekursif menghapus setiap file berakhiran~
.~
karakter tanpa menghindarinya (seperti ini\~
:) akan membuat Bash, ZSH, dll. (rm
Perintah pada dasarnya) mengira maksud Anda adalah direktori home.Jawaban:
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 (misalnyaroot
), atau karena mereka sedang digunakan (misalnya mount GVFS).Jika Anda tidak menambahkan
-f
(seperti pada,rm -rf something
), Anda akan mendapatkan sesuatu seperti: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
Untuk beberapa file, gunakan
-i
opsi untuk mendapatkan konfirmasi tentang menghapus file atau direktori:Jika menghapus dari direktori saat ini, awali dengan
./
untuk menghindari kesalahan menghapus lokasi yang berbeda .:Di atas adalah untuk menunjukkan penggunaan
./
. Jika ada subdirektori, tentu saja Anda dapat menggunakannyarm -v something/*~
juga. Hati-hati : jangan berpikir bahwarm ./.*
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.
Gunakan
find
(mungkin dengangrep
) 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 mencariman find
cara membuatnya selektif (harta karun), tetapi jika Anda tidak ingin repot, Anda bisa menggunakan familiargrep
untuk memfilter file yang ingin Anda hapus.find | grep example
, yang memberi saya 20 file ini. Itu terlihat bagus, jadi saya sekarang pergi dan menghapus file-file yang tepat, bersama denganrm -v
output verbose yang disebutkan sebelumnya, melaluixargs
: yang memberi saya hasil ini. Pratinjau seperti mencegah masalah di mana mengatakan, Anda membuat kesalahan ketik dansample
bukanexample
.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 menyebabkanxargs
kegagalan, atau memberi makanrm
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 denganfind
operator dan tindakan.Berikut ini akan menampilkan semua file yang berisi kata
example
Jika daftar itu adalah file yang ingin Anda hapus, gunakan
-exec
tindakan untuk meneruskan filerm
.Lihat Menggunakan Temukan untuk bantuan lebih lanjut tentang penggunaan
find
.sumber
find
output kegrep
danxargs rm
berbahaya.mv
(perintah favorit saya);)find
cara aman, yang tidak merusak (dan berpotensi menghapus file yang salah) jika nama file mengandung spasi, tab, baris baru,"
atau'
karakter. Misalnyafind . -name "*example*" -exec rm -v {} +
. mywiki.wooledge.org/UsingFindfind -delete
begitu berbahaya? Saya akan mengatakan sesuatu di sini tapi saya tidak tahu selain yang baru-baru ini ditemukan dan dihapus saya/
meskipun berjalan kering tanpa opsi-delete
hanya menemukan beberapa file yang ingin saya hapus. Saya melihat bahwa Anda merekomendasikan-exec rm
sebagai gantinya.-delete
tidak berbahaya, dan Anda dapat dengan aman menggunakannya bukan-exec rm {} +
. Saya biasanya lebih suka menggunakan alat dan fitur standar bila memungkinkan.-delete
adalah ekstensi GNU yang tidak standar, jadi ekstensifind
ini akan berfungsi dengan baik di Ubuntu, tetapi mungkin tidak pada sistem lain.Iya. Karakter tilde yang tidak dikutip sebagai argumen terpisah akan diperluas ke homedir Anda. Jadi
rm -r ~
diperluas kerm -r /home/yourusename
. Jadi, Anda memberi tahu rm untuk menghapus semua file di homedir Anda secara rekursif.Lihat http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion untuk informasi lebih lanjut tentang cara kerja ekspansi tilde.
sumber