karakter khusus dalam nama file (\ # 033OA)

10

Saya punya sedikit masalah dengan kesalahan yang sangat keras kepala selama rsync. Itu disebabkan oleh file dengan karakter khusus dalam nama file-nya. Ada yang lain tapi saya bisa mengatasinya dengan melakukan beberapa konversi dalam pengkodean nama file. Namun file yang satu ini saya bahkan tidak dapat menemukannya.

Jadi, inilah yang dikatakan rsync:

../.\#033OA.tex.pyD0MB" failed: No such file or directory (2)

Hal pertama yang diperhatikan adalah bahwa kode karakter tidak boleh hex atau oktal jadi saya sudah mencarinya di Google dan hanya menemukan ini . Jadi mungkin CURSOR UPkarakter (atau tidak). Saya sudah mencoba

ls -la *`printf '\033OA'`*

tidak berhasil. Saya juga mencoba mem-piping output ls dari direktori tersebut tetapi odtidak berhasil.

Apa lagi yang bisa saya lakukan? Atau karakter apa yang saya cari?

Terima kasih

luxifer
sumber
1
Coba ls -b, yang seharusnya menunjukkan
pelepasan
terima kasih ... yang telah membantu ... dapat memindahkannya dengan bantuan printf lalu ... jika Anda memposting ulang komentar ini sebagai jawaban, saya akan dengan senang hati menerimanya :)
luxifer

Jawaban:

9

Anda dapat menggunakan -bopsi untuk ls, yang menampilkan karakter non-grafis sebagai urutan pelepasan gaya-C.

enzotib
sumber
1

ls -aqakan mencetak semua nama file, dengan ?ganti setiap karakter yang tidak dapat dicetak . Pada banyak varian unix, ls -ABatau ls -Ab(periksa halaman manual Anda) akan mencetak lolos oktal. Dengan ls -aq, Anda dapat menggunakan output yang ditampilkan sebagai pola shell.

$ ls -Aq
.?OA.tex.pyD0MB
… more stuff …
$ mv -i .?OA.tex.pyD0MB weird-file
$ less weird-file

Cara lain untuk mendapatkan nama file entah bagaimana adalah dengan menggunakan penyelesaian shell Anda: masukkan mv .dan tekan Tabberulang kali hingga nama aneh dimasukkan.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
ls -qtidak menunjukkan file sedangkan ls -blakukan. mungkin karena nama filenya tidak[weird-character]OA.tex`printf %b '\033OA'`.tex
luxifer
@luxifer Ada .di awal nama file, jadi Anda perlu ls -Aqatau ls -aq. Dan jika Anda menggunakan shell wildcard, Anda perlu membuat .eksplisit: *tidak akan menyertakan file tetapi .*akan.
Gilles 'SO- stop being evil'
tidak, tidak ada! Output yang saya posting berasal dari rsync dan itu adalah akhir dari baris. Rsync akan menyalin terlebih dahulu $DESTINATION/.$FILENAMEsebelum memindahkan file ke nama yang benar. Karenanya pada sumbernya tidak ada file .di awal namanya. Juga, seperti yang dikatakan, ls -qtidak akan menunjukkan file ls -bitu.
luxifer