Ganti nama file dengan nama aneh di Samba mount

10

Saya ingin mengganti nama file dengan nama aneh menjadi sesuatu yang masuk akal, namun saya tidak dapat: /

$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

Saya sudah mencoba menggunakan nomor inode seperti yang disarankan di beberapa tempat di internet:

$ ls -il *000c.jpg
ls: '?j?Z?R?C1_000c.jpg': No such file or directory
213915 -rw-r--r-- 1 wolf wolf 794655 Jul 21  2012 '?j?Z?R?C1_000c.jpg'
$ find . -inum 213915 -print0 | xargs -0 -I '{}' mv '{}' 000c.jpg
mv: cannot move './?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

Apa yang harus saya lakukan?

Serigala abu-abu
sumber
1
Apa output sederhana lsdi direktori itu? Apakah file ditampilkan sebagai file biasa? Saya meminta untuk memastikan bahwa No such file or directoryini adalah kesalahan globbing dan bukan indikasi sistem file yang rusak.
terdon
1
Saya bertanya-tanya apakah sistem file perlu dijalankan fsck? Saya mungkin rusak. Bagaimana file mendapatkan nama itu?
Kusalananda
1
@Mioriin Tanda tanya dalam nama file adalah (atau mungkin juga) placeholder untuk karakter yang tidak dapat ditampilkan. (satu alasan untuk tidak pernah melewatkan output dari ls)
Kusalananda
1
Ini mungkin masalah font terminal. Itu menunjukkan ?untuk surat-surat yang tidak dapat ditampilkan. Coba beralih ke font yang sepenuhnya unicode.
Mio Rin
5
@Mioriin Apakah nama file dapat ditampilkan atau tidak merupakan herring merah dalam kasus ini saya pikir. Yang aneh adalah bahwa shell dapat berkembang *_000c.jpgtetapi itu mvkemudian tidak dapat memproses file. Ini, IMHO, menunjukkan sistem file yang rusak. ... atau mungkin dari sistem file yang dipasang pada jaringan yang hilang (dengan entri direktori masih di-cache), atau sesuatu.
Kusalananda

Jawaban:

16

Ringkasan komentar yang relevan:

Sistem file Unix memungkinkan setiap karakter dalam nama file selain dari \0(nul) dan /(garis miring). Fakta yang lsmenunjukkan tanda tanya hanya karena tidak dapat menampilkan beberapa karakter dari nama file di lokal saat ini (yang merupakan salah satu alasan mengapa Anda harus menghindari penguraian output darils ).

Namun, dengan share Samba, Anda tampaknya memiliki persyaratan yang lebih ketat pada nama file daripada pada sistem file Unix standar.

Karena file tersebut memiliki nama yang "ilegal" pada share Samba perantara Anda, file tersebut tidak dapat diakses dengan nama yang benar pada mesin yang me-mount share.

Tidak mvberhasil karena nama kembali dari pangsa Samba untuk perluasan pola globbing bukan nama sebenarnya dari file pada sistem file hosting, hanya versi nama Samba sendiri yang rusak.

Solusi Anda adalah masuk ke server yang benar-benar meng-host file (pada sistem file dengan aturan penamaan yang kurang ketat dari Samba) dan mengubah nama file di sana. Ini adalah tindakan yang benar.

Lihat juga obrolan Unix & Linux tentang pertanyaan ini .

Kusalananda
sumber
-2

Sebelum saya belajar tentang cara mengutip dalam shell unix, saya akan menggunakan diredmode emacs untuk mengubah nama atau menghapus file yang sulit dicocokkan. Anda cukup membuka direktori di emacs:

emacs -q .

... maka Anda dapat menggunakan tombol panah untuk menavigasi ke file yang ingin Anda ubah dan ganti namanya R. ?akan memberi Anda daftar perintah yang tersedia (Anda juga dapat menghapus file yang sulit dicocokkan).

Kemudian Anda C-x C-ckeluar dari emacs dan selesai.

Jim K.
sumber
-3

Seringkali dengan nama file yang tidak biasa Anda dapat menambahkan "./" sebelum nama file dan Linux akan mengenalinya dengan benar. Misalnya: $ ls ./?j?Z?R?C1_000c.jpg

bootbeast
sumber