hapus atau ganti nama file dengan nama file

10

Saya memiliki file kecil sial yang namanya tampak satu karakter, dan karakter itu adalah a \r

Bagaimana saya bisa menghapus ini?

Inilah yang saya dapatkan ls -bl:

-rw-rwxr--+   1 root             snapplewriters        0 Aug 29  2011 \r

ls -l cukup tampilkan "?"

Colin
sumber
Bagaimana Anda bisa mendapatkan file dengan nama seperti itu?
mkaito

Jawaban:

16

Kami ls -limendapatkan nomor inode untuk file (kolom pertama), lalu gunakan finduntuk menghapusnya (dengan asumsi inode adalah 12345):

find . -inum 12345 -exec rm -i {} \;

Garrett
sumber
Terima kasih - ini sangat membantu - Saya merasa seperti harus ada semacam referensi sistem yang tegas untuk file tersebut tetapi tidak dapat menemukannya (dengan cepat toh).
Colin
1
Tergantung pada versi yang finddiinstal, Anda juga bisa melakukannyafind . -inum 12345 -delete
William Jackson
Bagi saya, semakin banyak versi-agnostiknya, semakin baik. Tapi saran yang bagus. :)
Garrett
5

Saya pribadi akan meraih Python:

>>> import os
>>> '\r' in os.listdir('.')
True
>>> os.unlink('\r')

Tetapi Anda juga dapat melakukan ini dari shell jika Anda memahami karakter melarikan diri.

$ ls -b $'\r'
\r
$ rm -vi $'\r'
rm: remove regular empty file \r’? y
removed \r
Josh Lee
sumber
Saya kira Anda juga memiliki palu godam di dapur Anda? Kalau-kalau Anda perlu memecahkan kacang? :-)
mivk
3

Cara cepat lain untuk menghapus file yang dipanggil <carriage return>jika Anda menggunakan Bash shell adalah:

$ rm <control-v><control-m>
S2VpdGgA
sumber
2

Nama file karakter tunggal tidak biasa, dan jika Anda tidak memiliki file lain di direktori Anda, Anda dapat mencoba ini:

rm ?

Saya terlalu malas untuk belajar atau mencari cara mengutip karakter aneh, jadi saya telah menggunakan varian ini beberapa kali ketika saya terjebak dengan file dengan nama yang sulit.

Thomas Padron-McCarthy
sumber
-1 Ini cocok dengan semua file dengan nama karakter tunggal - Lihat "Ekspansi Pathname" di man bash. Cobatouch a b c d $'\r'; rm ?
l0b0
1
@ l0b0: Ya? Seperti yang saya tulis, nama file karakter tunggal tidak biasa. Sangat mungkin bahwa tidak ada file seperti itu di direktori, dan dalam hal ini, ini berfungsi. Kalau tidak, "rm -i?" dapat digunakan.
Thomas Padron-McCarthy