Jawaban:
Solusi paling hebat ketika datang ke file yang tidak dapat dihapus dengan cara biasa:
ls -il
Kolom pertama akan menampilkan nomor inode file.
find . -inum [inode-number] -exec rm -i {} \;
Ini akan menghapus file dengan nomor inode yang ditentukan setelah verifikasi.
-delete
alih-alih -exec
, lalu menyadari bahwa Anda menggunakan rm -i
yang merupakan ide bagus jadi saya memutar kembali. Maaf.
Anda harus dapat merujuk ke file itu sebagai ~/~
(tanpa tanda kutip) karena tilde-expansion hanya menerapkan tilde ( ~
) di bagian paling awal kata.
rm ./~
, untuk alasan yang sama Anda katakan
./~
secara harfiah berarti "file atau folder yang disebutkan ~
dalam direktori saat ini" . Tidak ada retas seperti karakter pelarian atau referensi inode.
./~
tidak. Setelah lima tahun, ingatan saya sedikit kabur, tetapi saya pikir itu sebabnya saya menyarankan ~/~
daripada yang lebih normal ./~
: Pertanyaannya secara khusus mengacu pada "file yang bernama ~
dalam direktori home [OP] "; tidak "di direktori saat ini".
Mengutipnya ( rm '~'
) atau menghindarinya ( rm \~
).
Itu selalu salah satu dari mereka (juga untuk misalnya $
), atau menambahkan --
untuk mencegah nama file dari ditafsirkan sebagai argumen: rm -- -i
menghapus file bernama -i
; juga berguna rm -- *
ketika Anda ingin menghapus semua file di direktori saat ini: Tidak disengaja rm -f *
hanya karena file tersebut dinamai seperti itu.
--
hanya menghentikan argumen berikut yang ditafsirkan sebagai parameter - itu tidak mencegah shell melakukan ekspansi (mis. *
), itulah yang terjadi di sini. (Saya tahu Anda menyarankan itu sebagai alternatif untuk situasi lain, tetapi peringatan akan baik.)