Перейменуйте файл із дивним іменем на горі Samba


10

Я хочу перейменувати файл із дивним іменем на щось розумне, однак я не в змозі: /

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

Я намагався використовувати номер inode, як було рекомендовано в кількох місцях в Інтернеті:

$ 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

Що я повинен зробити?


1
Який вихід простого lsв цьому каталозі? Чи відображається файл як звичайний файл? Я прошу переконатися, що No such file or directoryпомилка є помилкою, а не свідчить про пошкоджену файлову систему.
тердон

1
Цікаво, чи потрібно запускати файлову систему fsck? Я можу бути зіпсованим. Як файл набув цього імені?
Кусалаланда

1
@Mioriin Знаки запитання у назві файлу є (або цілком можуть бути) заповненнями символів, які неможливо відобразити. (одна з причин ніколи не розбирати результат ls)
Kusalananda

1
Це може бути проблема шрифту терміналу. Він показує ?на листи, які він не може відображати. Спробуйте перейти на повністю unicode шрифт.
Міо Рін

5
@Mioriin Можливо, чи може відображатись ім'я файлу, це трохи червона оселедець у цьому випадку, я думаю. Що дивно, що оболонка здатна розширюватися, *_000c.jpgале mvпотім не може обробити файл. Це, IMHO, свідчить про корумповану файлову систему. ... або, можливо, файлової системи, встановленої на мережевій загальнодоступній спільноті (із записом у каталозі все ще зберігається), чи щось.
Kusalananda

Відповіді:


16

Короткий огляд відповідних коментарів:

Файлові системи Unix дозволяють будь-який символ у назві файлу, крім \0(nul) та /(slash вперед). Факт, що lsпоказує знаки запитання, полягає лише в тому, що він не може відображати деякі символи імені файлу в поточному локалі (що є однією з причин, чому вам слід уникати розбору результатівls ).

Однак, маючи частку Samba, ви, мабуть, мають більш суворі вимоги до назви файлів, ніж до стандартної файлової системи Unix.

Оскільки файл мав ім’я, яке було "незаконним" на вашій проміжному папці Samba, файл був недоступний своїм правильним ім'ям на машині, що монтує спільний доступ.

Це mvне спрацювало, оскільки ім'я, повернене з папки Samba для розширення шаблону глобалізації, не було власне іменем файлу в хостинговій файловій системі, лише власна змінена версія Samba.

Ваше рішення полягало в тому, щоб увійти на сервер, який фактично розміщував файл (у файловій системі з менш обмежувальними правилами іменування, ніж Samba) та змінити ім'я файлу там. Це був правильний хід дій.

Дивіться також чат Unix та Linux щодо цього питання .


-2

Перш ніж я дізнався про котирування в оболонках Unix, я б застосував diredрежим emacs для перейменування або видалення важко узгоджуваних файлів. Ви просто відкриєте каталог у emacs:

emacs -q .

... тоді ви можете використовувати клавіші зі стрілками для переходу до файлу, з яким потрібно змінити та перейменувати файл R. ?надасть вам список доступних команд (ви можете видалити файли, які теж важко відповідати).

Тоді ви просто C-x C-cвиходите з emacs і все закінчите.


-3

Часто за допомогою незвичних імен файлів ви можете додавати "./" перед назвою файлу, а Linux правильно розпізнає його. Наприклад: $ ls ./?j?Z?R?C1_000c.jpg

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.