Punya file bernama ~ (tilde) di direktori home saya

46

Saya hanya memperhatikan bahwa saya memiliki file bernama ~di ~-directory saya .

$ ls -la ~
...
-rw-r-----  1 x1 x1  733962240 Mar  1 17:55 ~
...

Ada yang tahu bagaimana saya bisa mvatau rmitu?

scrrr
sumber
Cobalah untuk menghapusnya dengan i-node.
gronostaj

Jawaban:

55

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.

Terjepit
sumber
Ini berhasil. Mungkin solusi oleh rici juga bagus, tapi saya tidak mencobanya. Terima kasih banyak!
scrrr
Ya, jawaban rici juga bagus. Dan saya pikir ini lebih baik karena lebih sederhana.
Andrey Regentov
bagus, +1. Saya mengubah jawaban Anda untuk digunakan -deletealih-alih -exec, lalu menyadari bahwa Anda menggunakan rm -iyang merupakan ide bagus jadi saya memutar kembali. Maaf.
terdon
Jangan khawatir. Selalu senang ketika seseorang menganggap jawaban saya layak untuk waktu mereka :)
Squeezy
Jawaban ini tidak berhasil untuk saya. Ubuntu 14.04 LTS
KhoPhi
46

Anda harus dapat merujuk ke file itu sebagai ~/~(tanpa tanda kutip) karena tilde-expansion hanya menerapkan tilde ( ~) di bagian paling awal kata.

rici
sumber
17
juga, pergi ke folder dan rm ./~, untuk alasan yang sama Anda katakan
Carlos Campderró
@ CarlosCampderrós mempertimbangkan untuk membuat jawaban itu. Saya akan menganggapnya sebagai solusi "terbaik" dan paling mudah, dibandingkan dengan jawaban lain karena ./~secara harfiah berarti "file atau folder yang disebutkan ~dalam direktori saat ini" . Tidak ada retas seperti karakter pelarian atau referensi inode.
ADTC
@ ADTC: untuk membela jawaban saya, tidak perlu mengubah CWD, sedangkan menggunakan ./~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".
rici
@rici Itu masuk akal, dan dalam konteks pertanyaan itu akan sesuai. Tapi saya suka melihat jawaban yang umum, atau berbicara secara umum terlebih dahulu sebelum menguraikan lebih lanjut untuk kasus spesifik pertanyaan itu. Itu pembelaan saya: D
ADTC
20

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.

Daniel Beck
sumber
Hm, tidak ada yang sepertinya tidak berhasil .. Saya mencoba tanda kutip tunggal, melarikan diri dan backticks .. dia tidak mengambil file. Mengatakan itu tidak ada atau mengartikan ~ sebagai direktori home ..
scrrr
@scrrr Apa shell Anda?
Daniel Beck
pesta. Tetapi masalah diselesaikan dengan cara inode.
scrrr
@scrr Senang masalah Anda terpecahkan, tapi sekarang saya ingin tahu mengapa bash lolos tidak bekerja dengan cara yang sama pada sistem Anda seperti halnya pada saya.
Isaac Rabinovitch
1
Cermat. --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.)
Bob