Я хочу переименовать файл со странным именем во что-то разумное, однако я не могу: /
$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory
Я попытался использовать номер инода, как было рекомендовано в нескольких местах в Интернете:
$ 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
Что я должен делать?
ls
в этом каталоге? Файл отображается как обычный файл? Я прошу убедиться, чтоNo such file or directory
это ошибочная ошибка, которая не указывает на поврежденную файловую систему.fsck
? Я могу быть испорчен. Как файл получил это имя?ls
)?
для букв, которые не могут отображаться. Попробуйте перейти на полностью Unicode шрифт.*_000c.jpg
ноmv
затем не может обработать файл. Это, ИМХО, свидетельствует о повреждении файловой системы. ... или, возможно, файловой системы, которая смонтирована на удаленном сетевом ресурсе (с кэшированными записями каталога), или чем-то еще.Ответы:
Резюме соответствующих комментариев:
Файловые системы Unix допускают любой символ в имени файла, кроме
\0
(nul) и/
(косая черта). Факт, которыйls
показывает вопросительные знаки, только потому, что он не может отображать некоторые символы имени файла в текущей локали (что является одной из причин, почему вы должны избегать анализа выводаls
).Однако, с общим ресурсом Samba, вы, очевидно, предъявляете более строгие требования к именам файлов, чем к стандартной файловой системе Unix.
Поскольку имя файла было «незаконным» на промежуточном общем ресурсе Samba, файл был недоступен по правильному имени на машине, монтирующей общий ресурс.
Это
mv
не сработало, поскольку имя, возвращаемое из общего ресурса Samba для расширения шаблона смещения, было не фактическим именем файла в файловой системе хоста, а только собственной искаженной версией имени Samba.Ваше решение состояло в том, чтобы войти на сервер, на котором фактически размещался файл (в файловой системе с менее строгими правилами именования, чем в Samba), и изменить имя файла на нем. Это был правильный курс действий.
См. Также чат Unix & Linux по этому вопросу .
источник
Прежде чем я узнал о цитировании в оболочках Unix, я использовал
dired
режим emacs для переименования или удаления трудно сопоставляемых файлов. Вы просто открываете каталог в emacs:... затем вы можете использовать клавиши со стрелками, чтобы перейти к файлу, который вы хотите изменить, и переименовать файл
R
.?
выдаст вам список доступных команд (вы также можете удалить файлы, которые трудно сопоставить).Тогда вы просто
C-x C-c
выходите из Emacs и все готово.источник
Часто с необычными именами файлов вы можете добавить «./», прежде чем имя файла и Linux будет правильно его распознавать. Например: $ ls ./?j?Z?R?C1_000c.jpg
источник