Поскольку символы, скорее всего, являются международными символами, они, вероятно, появляются в качестве управляющих кодов в вашем наборе символов en_US, поэтому ls показывает их в виде вопросительных знаков.
Это может быть связано с тем, что ваш дистрибутив по умолчанию выбрал псевдоним ls в глобальном профиле. Например:
alias ls='ls -q'
Вы можете увидеть, сделал ли это ваш дистрибутив, набрав в вашей оболочке:
alias ls
Который распечатает что-то вроде следующего:
$ alias ls
alias ls='ls --color=auto'
Приведенная ниже ссылка предполагает, что если вы введете «ls -b», вы увидите восьмеричные управляющие коды, чтобы вы знали, по крайней мере, какие символы используются.
http://www.arsc.edu/arsc/support/howtos/nonprintingchars/
Предполагая, что это не работает, у вас есть еще одна опция, упомянутая ниже:
Инструмент, о котором я до сих пор не знал, называемый OctalDump (в Debian - / usr / bin / od)
$ ls | od -b
Покажет вам восьмеричную форму контрольных кодов.
$ ls | od -c
Покажет вам символы, включая любые скрытые дополнительные пробелы, которые могут быть в конце (обратите внимание на дополнительные пробелы в конце в их примере)
После того, как вы узнаете, какие управляющие символы находятся в игре, и есть ли дополнительные скрытые пробелы, вы сможете найти способ перейти к каталогу в каталог, выбрав управляющие символы. В противном случае у вас есть несколько вариантов переименования каталога.
На странице выше также удобно использовать быстрый и грязный метод удаления управляющих символов с помощью команды mv, который, я думаю, будет работать, пока вы действительно выходите из пробела, но НЕ экранируете вопросительные знаки (таким образом, делая их односимвольными). подстановочные знаки), и до тех пор, пока ничего не существует в каталоге, где находится этот мошеннический каталог. Причина этих явных требований заключается в том, что вы используете только символы подстановки и один пробел, и поэтому вы не хотите, чтобы подстановочный знак непреднамеренно совпадал с любым другим файлом или каталогом.
Если описанный выше метод не работает, вы почти наверняка можете использовать метод find, упомянутый в других ответах, другим способом. Вместо того, чтобы пытаться перейти в каталог, используя номер инода, который, как вы сказали, вы уже пробовали, вы можете переименовать его, используя номер инода. Обязательно скопируйте весь набор из 3 строк для этой одной команды со страницы выше (замените часть «требуемого имени» на фактическое имя, которое вы хотите переименовать, однако).
Как только каталог переименован, вы сможете получить к нему доступ. Я могу только надеяться, что он также не содержит файлов с управляющими кодами в именах, или вам придется промыть и повторить для каждого файла (и / или подкаталога) в каталоге, который вы только что переименовали, в этот момент цикл for будет вероятно, будет разумно просто назвать каждый файл как число, увеличивая с 1. :-)
cd */
может сработать.*
Следует расширить понятное для оболочки описание каталога иcd
игнорировать дополнительные аргументы. Другим способом может быть использование графического файлового менеджера (включая MC на основе терминала) или встроенных навигаторов дерева файлов, например, в Vim. Вы также можете поэкспериментировать с-exec
переключением наfind, not with
cd` напрямую (это встроенная оболочка), но, например, сls
другими инструментами.