При распаковке архива я обнаружил каталог, в котором ls
указано "??????????????? ?????". Предположительно, имя не в юникоде? Во всяком случае, я не могу найти способ доступа к папке. Я пытался cd $(find -inum inode_number)
, но это дает мне
"bash: cd: ./??????????: No such file or directory".
Есть ли другой способ получить доступ к папке напрямую по номеру инода?
filenames
inode
directory-listing
jackd243
источник
источник
cd */
может сработать.*
Следует расширить понятное для оболочки описание каталога иcd
игнорировать дополнительные аргументы. Другим способом может быть использование графического файлового менеджера (включая MC на основе терминала) или встроенных навигаторов дерева файлов, например, в Vim. Вы также можете поэкспериментировать с-exec
переключением наfind, not with
cd` напрямую (это встроенная оболочка), но, например, сls
другими инструментами.cd
с несколькими аргументами происходит сбой.too many arguments
".Ответы:
Общий подход для работы с любым каталогом (или файлом) заключается в использовании его номера inode.
Во-первых, используйте ls, чтобы получить инод нужной папки:
-l
для длинного списка (необязательно)-i
получить значения инода-a
просматривать все файлы, даже скрытые (необязательно)В списке вы увидите длинный номер в первом столбце, примерно такой:
Теперь вы можете перейти в этот каталог, используя:
... но заменив ###### длинным номером, который вы получили в списке каталогов.
Конечно, команда не должна быть
cd
. Это может бытьrm
,cp
,mv
, и т.д. ...источник
Поскольку символы, скорее всего, являются международными символами, они, вероятно, появляются в качестве управляющих кодов в вашем наборе символов en_US, поэтому ls показывает их в виде вопросительных знаков.
Это может быть связано с тем, что ваш дистрибутив по умолчанию выбрал псевдоним ls в глобальном профиле. Например:
Вы можете увидеть, сделал ли это ваш дистрибутив, набрав в вашей оболочке:
Который распечатает что-то вроде следующего:
Приведенная ниже ссылка предполагает, что если вы введете «ls -b», вы увидите восьмеричные управляющие коды, чтобы вы знали, по крайней мере, какие символы используются.
http://www.arsc.edu/arsc/support/howtos/nonprintingchars/
Предполагая, что это не работает, у вас есть еще одна опция, упомянутая ниже:
Инструмент, о котором я до сих пор не знал, называемый OctalDump (в Debian - / usr / bin / od)
Покажет вам восьмеричную форму контрольных кодов.
Покажет вам символы, включая любые скрытые дополнительные пробелы, которые могут быть в конце (обратите внимание на дополнительные пробелы в конце в их примере)
После того, как вы узнаете, какие управляющие символы находятся в игре, и есть ли дополнительные скрытые пробелы, вы сможете найти способ перейти к каталогу в каталог, выбрав управляющие символы. В противном случае у вас есть несколько вариантов переименования каталога.
На странице выше также удобно использовать быстрый и грязный метод удаления управляющих символов с помощью команды mv, который, я думаю, будет работать, пока вы действительно выходите из пробела, но НЕ экранируете вопросительные знаки (таким образом, делая их односимвольными). подстановочные знаки), и до тех пор, пока ничего не существует в каталоге, где находится этот мошеннический каталог. Причина этих явных требований заключается в том, что вы используете только символы подстановки и один пробел, и поэтому вы не хотите, чтобы подстановочный знак непреднамеренно совпадал с любым другим файлом или каталогом.
Если описанный выше метод не работает, вы почти наверняка можете использовать метод find, упомянутый в других ответах, другим способом. Вместо того, чтобы пытаться перейти в каталог, используя номер инода, который, как вы сказали, вы уже пробовали, вы можете переименовать его, используя номер инода. Обязательно скопируйте весь набор из 3 строк для этой одной команды со страницы выше (замените часть «требуемого имени» на фактическое имя, которое вы хотите переименовать, однако).
Как только каталог переименован, вы сможете получить к нему доступ. Я могу только надеяться, что он также не содержит файлов с управляющими кодами в именах, или вам придется промыть и повторить для каждого файла (и / или подкаталога) в каталоге, который вы только что переименовали, в этот момент цикл for будет вероятно, будет разумно просто назвать каждый файл как число, увеличивая с 1. :-)
источник
"?" имеет особое значение в оболочке, это означает «любой символ, включая ни одного». Так что если ваш файл действительно называется "??????????????? ?????" Вы, вероятно, должны избежать "?" (и пробелы), чтобы вы могли попробовать что-то вроде cd \? \? \? \? \? \? \ \? \? \? \? (если вы еще не пробовали)
Это предполагает, что кто-то намеренно дал файлу хитрое имя, а не искаженное / поврежденное / незаконное кодирование.
источник
ls
любит отображать не-ASCII символы (≥0x7F) как?
–– так что имя каталога, вероятно, не просто строка знаков вопроса.Сделать
ls
. Есть ли что-нибудь в каталоге (файл или подкаталог) с именем, которое длиннее, чем ваш загадочный подкаталог (то есть 21, если ваш «??????????????? ?????» точно)? Затем переименуйте их в более короткие имена или переместите в другие каталоги. Затем введитеЭтот подстановочный знак (20 знаков вопроса, за которым следует звездочка) должен совпадать с любым именем длиной 20 или более символов - и первая указанная мною инструкция должна была обеспечить, чтобы ваш подкаталог mystery был единственным, который соответствует этому шаблону. Но это может быть более полезным сделать
источник
ls
с параметром либо--quoting-style=shell
или,--quoting-style=escape
чтобы заставить его создавать правильно экранированную версию этого имени файла.Один из простых способов узнать, что там, - это FTP на компьютер с FileZilla. Затем вы можете использовать FileZilla, чтобы переименовать каталог.
источник
Используйте файловый браузер, например Midnight Commander (текст), Nautilus (GNOME) или Dolphin (KDE) для работы с каталогом.
источник
работать с каталогами (или файлами), которые имеют странные / трудные для ввода имена:
1) Запустите,
ls -i
чтобы обнаружить индекс файла.Эта
ls
опция даст вам каждое имя файла и идентификатор этого файла в файловой системе (индекс)2) Используйте команду find для запуска команды для файла
скажем, индекс был 9961926
ты можешь бежать
удалить файл
или
переместить его в лучшее название
или даже
дать ему новое имя, сохраняя старое имя
(предположительно, вы могли бы запустить и другие команды. К сожалению, я не смог использовать эту строку для запуска a
cd
)источник