Linux имя файла запрещенные символы

Имена файлов Linux /Windows /Unix /â | |: Какие символы разрешены? Что не скрыто?

Какие символы разрешены и какие из них должны быть экранированы в командной строке в разных операционных системах?

4 ответа

В статье Wikipedia обсуждается имя файла с именем Имена файлов .

Вы можете найти это эссе информативным: Фиксация имен файлов Unix /Linux /POSIX .

В этой статье сравниваются OS X и Windows XP: X против XP: запрещенные символы в именах файлов (PDF, см. стр. 64-66).

Я не знаю, какие символы должны быть un -escaped, но в Linux, вероятно, небезопасно избегать символов, которые могут иметь особое значение, таких как «n» (новая строка) , «t» (вкладка) и другие, но это обычно не проблема в файловых операциях. Возможно, вы имеете в виду «бегство», а не «невыполнение». Наиболее распространенными являются те, которые интерпретируют оболочка, такие как пространство, «>», « 13 июня 2010, 02:29:49

Единственными символами, недопустимыми в имени файла в * nix, являются NUL и / . В Windows только NUL , : и \ действительно не разрешены, но многие приложения ограничивают это, а также предотвращают ? , * , + и % .

Ни в коем случае не нужно указывать символы в имени файла , за исключением случаев, когда это необходимо для того, чтобы интерпретировать оболочку не было.

Если вы создаете файл в Windows с помощью Проводника, используя один из следующих символов, он будет жаловаться, что символы не разрешены:

Хорошая ссылка здесь:

Microsoft далее заявляет:

«. на настольных платформах Windows, недопустимые символы пути могут включать символы ASCII /Unicode с 1 по 31, а также quote («), меньше ( ), pipe (|), backspace (\ b), null (\ 0) и tab (\ t). «

В Linux и других совместимых с POSIX системах «/» зарезервировано, так как это разделитель каталогов, а «\ 0» (символ NULL) обозначает конец строки. Все остальное разрешено.

Источник

Работа с «плохими» файлами в командной строке в Linux

При работе в командной строке администраторы часто сталкиваются с необходимостью что-то сделать с определенным файлом: удалить, переместить, скопировать. При выполнении подобных задач зачастую приходится обращаться к файлам по имени, что может быть затруднительно, поскольку в именах файлов могут встречаться самые разные символы. Даже те, которых нет на клавиатуре. В этом плане работу может облегчить файловый менеджер, в котором файл можно просто выделить и совершить с ним нужное действие. Но для тех, кто привык работать исключительно в командной строке, предлагаются следующие способы.

В качестве shell-оболочки рассмотрим bash, как самую используемую. А в качестве операции над файлами рассмотрим удаление, как самую деструктивную.

Ситуации могут быть разными. В текущей директории могут быть файлы, которые нужно удалить вместе с теми, которые нужно оставить. Имена у них могут быть самыми разными. Причем первые от последних могут отличаться только одним каким-нибудь заковыристым символом.

В названии файла есть служебный символ bash

Самый простой случай. Для удаления файлов, содержащих в своем названии служебные символы вроде пробелов, кавычек, двойных кавычек, звездочек, обратные кавычки и др. можно заэкранировать обратным слешем или использовать одинарные кавычки:

С помощью одинарных кавычек нельзя удалить файл, в названии которого есть одинарная кавычка, даже заэкранировав ее.

С полным списком служебных символов и механизмом экранирования в bash можно ознакомиться в man bash. Раздел QUOTING.

Имя файла начинается с дефиса

Удалить файл, начинающийся с дефиса простым экранированием не получится, и команда rm будет воспринимать дефис, как начало своего аргумента. Решить проблему довольно просто:

Читайте также:  Windows function call trace

Удаляем по wildcard

Если удаление файлов попадает под wildcard-маску, то можно удалить всю группу файлов:

Файлы с управляющим символом в названии

В названии файла может встречаться управляющий ASCII-символ, такой как перевод строки (\n), табуляция (\t), backspace (\b). Это символы с ASCII-кодами менее 0x20, а также символы DELETE и ESC. Для удаления таких файлов подходит конструкция:

Другим способом удаления таких файлов являяется ввод управляющего символа с клавиатуры. Для этого нужно воспользоваться комбинацией клавиш, которая экранирует следующий введенный символ, тем самым запрещая системе обрабатывать его. Как правило, эта комбинация CTRL+V. Точно убедиться в этом можно с помощью команды stty -a, посмотрев на параметр lnext. Удалим файл, содержащий символ ESC:

Удаление файлов с символами utf8

Если имя файла содержит символ в кодировке utf8, который мы не можем набрать на клавиатуре, то удалить такой файл можно выделением его мышкой, копированием в буфер обмена и последующей вставкой на ввод команды rm. Главное условие состоит в том, что наш терминал должен работать в кодировке utf8. Кодировка выставляется в настройках терминала. Будь то xterm, putty или брутальный linux tty.

Перекодировка имени файла

Подозревая, что имя файла находится в кодировке, отличной от кодировки терминала, мы можем выполнить перекодирование всех файлов в текущей директории. В результате файлы с битой кодировкой будут перекодированы, а файлы с ascii-символами изменений не претерпят. Существенный плюс этого способа – приведение всех файлов в читабельный вид.

Как видно, чтобы осуществить правильное перекодирование нужно знать две кодировки: предполагаемую кодировку файла и кодировку нашего терминала. Наиболее трудно распознать предполагаемую кодировку файла по непонятным символам. Есть замечательная табличка

Также можно воспользоваться сторонними программами, которые попытаются распознать кодировку автоматически. Например, онлайн-декодер Лебедева.

Если вы встретили такие символы в примонтированном media-носителе или смонтированном разделе Windows, не спешите ничего перекодировать. Возможно, вы просто указали неправильные опции монтирования.

Автокомплит

В случае, если в директории название требуемого файла начинается уникально, и это название можно однозначно сформировать автокомплитом, то это довольно простой способ удалить файл:

Удаляем файл через меню выбора

Если мы дошли сюда, дело плохо. Попробуем удалить конкретный файл, составив для этого меню выбора. В итоге, все что нам останется сделать – это выбрать нужный пункт меню вместо ввода имени файла. Для этого нам нужно запрограммировать действие, которое будет происходить с файлом или файлами после ввода нами нужных пунктов меню.

Удаление по номеру inode

Удалить файл можно по его номеру inode. Номер inode уникально идентифицирует файл в файловой системе. Узнать номер inode можно с помощью команды ls, а удалить – с помощью find. Недостаток этого способа, такой же, как у предыдущего. Неудобно, в случае большого числа файлов.

Удаление по hex-коду

И нельзя не упомянуть один суровый метод. Удаление по hex-кодам. Суть такова: мы узнаем hex-коды всех байтов в имени файла, а затем удаляем файл, указывая вместо имени hex-коды.

Хорошо, все-таки, что на практике такие файлы попадаются нечасто.

Источник

Какие символы запрещены в именах каталогов Windows и Linux?

я знаю, что / является незаконным в Linux, и следующие являются незаконными в Windows (Думаю) * . » / [ ] : ; | = ,

что еще я упустил?

мне нужно полное руководство, однако, и тот, который учитывает двухбайтовые символы. Связь с внешними ресурсами меня устраивает.

мне нужно сначала создать каталог в файловой системе, используя имя что может содержат запрещенные символы, поэтому я планирую заменить эти символы подчеркивает. Затем мне нужно записать этот каталог и его содержимое в zip-файл (используя Java), поэтому любые дополнительные советы относительно имен zip-каталогов буду признателен.

12 ответов

«полное руководство» запрещенных символов имени файла не будет работать на Windows, потому что он резервирует имена файлов, а также символы. Да, такие персонажи, как * » ? и другие запрещены, но есть бесконечное число имен, состоящих только из допустимых символов, которые запрещены. Например, пробелы и точки являются допустимыми символами имени файла, но имена, состоящие только из этих символов, запрещены.

Читайте также:  Linux драйвер для radeon vega

Windows не различает символы верхнего и нижнего регистров, поэтому вы не можете создать папку с именем A если один по имени a уже существует. Хуже того, казалось бы-разрешенные имена вроде PRN и CON , и многие другие, зарезервированы и не допускается. Windows также имеет несколько ограничений длины; имя файла, допустимое в одной папке, может стать недопустимым при перемещении в другую папку. Правила именование файлов и папок находится на MSDN.

вы не можете, как правило, использовать пользовательский текст для создания Каталог имен Windows. Если вы хотите разрешить пользователям называть все, что они хотят, вы должны создать безопасные имена, такие как A , AB , A2 et al., хранить созданные пользователем имена и их эквиваленты путей в файле данных приложения и выполнять сопоставление путей в приложении.

если вы абсолютно должны разрешить имена пользовательских папок, единственный способ определить, являются ли они недопустимыми, — поймать исключения и предположить, что имя недопустимо. Даже это чревато опасностью, так как исключения для запрещенного доступа, автономных дисков и вне дискового пространства перекрываются с исключениями для недопустимых имен. Ты открываешь одну огромную банку боли.

давайте держать его простым и ответить на вопрос, в первую очередь.

запрещено печатаемые символы ASCII являются:

непечатаемые символы

если ваши данные поступают из источника, который разрешил бы непечатаемые символы, то есть больше, чтобы проверить для.

Примечание: хотя в файловых системах Linux/Unix разрешено создавать файлы с управляющими символами в имени файла,это может быть кошмаром для пользователей, чтобы иметь дело с такими файлами.

зарезервированные имена файлов

следующие имена зарезервировано:

другие правила

имена файлов не могут заканчиваться пробелом или точкой.

в Linux и других системах, связанных с Unix, есть только два символа, которые не могут отображаться в имени файла или каталога, и это NUL ‘ ‘ и Слэш ‘/’ . Косая черта, конечно, может отображаться в имени пути, разделяя компоненты каталога.

слух 1 есть ли у Стивена Борна (из «shell» fame) каталог, содержащий 254 файла, по одному на каждую букву (код символа), которые могут отображаться в имени файла (исключая / , ‘ ‘ ; на имя . был текущий каталог, конечно). Он использовался для тестирования оболочки Борна и обычно наносил ущерб неосторожным программам, таким как программы резервного копирования.

другие люди покрыли правила Windows.

обратите внимание, что MacOS X имеет файловую систему без учета регистра.

1 это был Керниган и Пайк в практика программирования кто сказал это в главе 6, тестирование, §6.5 стресс Тесты:

когда Стив Борн писал свою оболочку Unix (которая стала известна как оболочка Борна), он сделал каталог из 254 файлов с односимвольными именами, по одному для каждого значения байта, кроме ‘ ‘ и Слэш, два символа, которые не могут отображаться в именах файлов Unix. Он использовал эту директорию для всевозможных тестов на соответствие шаблону и токенизацию. (Конечно, тестовый каталог был создан программой.) В течение многих лет после этого этот каталог был проклятием файл-дерево-Ходячие программы; он тестировал их до разрушения.

вместо создания черного списка символов вы можете использовать белый. Учитывая все обстоятельства, диапазон символов, которые имеют смысл в контексте имени файла или каталога, довольно короткий, и если у вас нет определенных требований к именованию, ваши пользователи не будут удерживать его против вашего приложения, если они не могут использовать всю таблицу ASCII.

это не решает проблему зарезервированных имен в целевой файловой системе, но с белым списком проще снижение рисков у источника.

в этом духе, это набор символов, которые можно считать безопасным:

  • буквы (a-z A-Z) — символы Юникода, а также, если это необходимо
  • цифры (0-9)
  • подчеркивания (_)
  • дефис (-)
  • пробел
  • точка (.)

и любые дополнительные безопасные символы, которые вы хотите разрешить. Помимо этого, вы просто должны применять некоторые дополнительные правила, касающиеся пробелов и точек. Этого обычно достаточно:

  • имя должно содержать хотя бы одну букву или число (чтобы избежать только точек/пробелов)
  • имя должно начинаться с буквы или цифры (чтобы избежать ведущими точками/пробелами)
Читайте также:  Интерфейс системных вызовов linux

это уже позволяет довольно сложные и бессмысленные имена. Например, эти имена были бы возможны с этими правилами и были бы допустимыми именами файлов в Windows / Linux:

по сути, даже с таким небольшим количеством белых символов вы все равно должны решить, что на самом деле имеет смысл, и проверить/настроить имя соответственно. В одном из моих приложений я использовал те же правила, что и выше, но удалил все дубликаты точек и пробелов.

Ну, если только для исследовательских целей, то вам лучше всего посмотреть эта запись Википедии о именах файлов.

Если вы хотите написать портативную функцию для проверки ввода пользователя и создания имен файлов на основе этого, короткий ответ не. Взгляните на портативный модуль, такой как Perl File:: Spec чтобы увидеть все прыжки, необходимые для выполнения такой «простой» задачи.

простой способ заставить Windows сообщить вам ответ-попытаться переименовать файл через Проводник и ввести / для нового имени. Windows появится окно сообщения, сообщающее вам список незаконных символов.

для Windows вы можете проверить его с помощью PowerShell

для отображения UTF-8 кодов вы можете конвертировать

по состоянию на 18.04.2017 среди ответов на эту тему нет простого черного или белого списка символов и имен файлов — и есть много ответов.

лучшее предложение, которое я мог придумать, — позволить пользователю назвать файл так, как ему нравится. Используя обработчик ошибок, когда приложение пытается сохранить файл, поймать какие-либо исключения, предположим, что имя файла виновато (очевидно, после того, как убедился, что путь сохранения был в порядке), и запросить у пользователя новое имя файла. Для наилучшие результаты, поместите эту процедуру проверки в цикл, который продолжается до тех пор, пока пользователь не получит его правильно или не сдастся. Работали лучше для меня (по крайней мере в VBA).

пример кода VBA:(будут добавлены позже)

хотя единственными незаконными символами Unix могут быть / и NULL , хотя некоторые соображения для интерпретации командной строки должны быть включены.

например, хотя это может быть законным именем файла 1>&2 или 2>&1 в Unix такие имена файлов могут быть неправильно истолкованы при использовании в командной строке.

аналогичным образом можно было бы назвать файл $PATH , но при попытке доступа к нему из командной строки оболочка переведет $PATH его значение переменной.

при создании ярлыков интернета в Windows, чтобы создать имя файла, он пропускает незаконные символы, за исключением косой черты, которая преобразуется в минус.

в оболочках Unix вы можете цитировать почти каждый символ в одинарных кавычках ‘ . Кроме самой одинарной кавычки, и вы не можете выражать управляющие символы, потому что \ не расширяется. Доступ к самой одинарной кавычке из строки с кавычками возможен, потому что вы можете объединить строки с одинарными и двойными кавычками, например ‘I'»‘»‘m’ который можно использовать для доступа к файлу с именем «I’m» (двойная цитата также возможна здесь).

таким образом, вы должны избегать всего контроля персонажи, потому что их слишком сложно ввести в оболочку. Остальное все еще смешно, особенно файлы, начинающиеся с тире, потому что большинство команд читают их как параметры, если у вас нет двух тире — раньше, или вы задаете их с ./ , который также скрывает начиная с — .

если вы хотите быть хорошим, не используйте ни один из символов оболочки и типичных команд, используемых в качестве синтаксических элементов, иногда зависящих от позиции, поэтому, например, вы все еще можете использовать — , но не как первый символ; то же самое с . , вы можете использовать его в качестве первого символа только тогда, когда вы имеете в виду его («скрытый файл»). Когда вы имеете в виду, ваши имена файлов-это escape-последовательности VT100; -), так что LS искажает вывод.

У меня была такая же потребность, и я искал рекомендации или стандартные ссылки и наткнулся на эту тему. Мой текущий черный список символов, которых следует избегать в именах файлов и каталогов:

Источник

Оцените статью