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.
-deletealih-alih -exec, lalu menyadari bahwa Anda menggunakan rm -iyang 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 -- -imenghapus 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.)