Я понимаю и принимаю предпосылку, что защитные сценарии оболочки 1 являются разумными и, в долгосрочной перспективе, более устойчивыми.
Многие из ответов на вопросы обработки текста здесь следуют этому принципу, встраивая непредвиденные ответы для неортодоксальных имен файлов; которые могут содержать пробелы, тире и новые строки.
Насколько распространены новые строки в именах файлов? В частности:
- Какие-либо приложения создают имена файлов, которые включают переводы строки по умолчанию?
- Есть ли ситуации, когда было бы желательно создать такие имена файлов?
- Или они в основном являются ошибкой пользователя?
[1] Имеется в виду планирование и управление максимально широким диапазоном сценариев и непредвиденных обстоятельств ...
Вопрос вдохновлен (довольно жалобным) комментарием к этому вопросу .
shell-script
filenames
newlines
jasonwryan
источник
источник
Ответы:
Я никогда не видел имя файла с новой строкой, кроме тех, которые специально созданы для тестирования приложений, которые манипулируют именами файлов. Имена файлов, содержащие переводы строк, могут появляться из-за:
POSIX определяет имя файла как «имя, состоящее из 1 до {NAME_MAX} байтов, используемых для именования файла. Символы, составляющие имя, могут быть выбраны из набора всех значений символов, кроме символа косой черты и нулевого байта. Имена файлов точка и точка-точка имеют особое значение.»Там нет никакой гарантии , что каждая файловая система будет принимать„странные“имена файлов (единственные гарантированные символы ASCII буквы, цифры, время, дефис и подчеркивание , то есть
A-Z
,a-z
,0-9
и._-
, с дефисом запрещено в первой позиции), но большинство нативных файловых систем на современных юнитах делают.источник
spaces
в именах файлов не гарантируется переносимость? Было бы полезно, если бы вы пояснили, что эти последние три символа являютсяperiod, underscore, and hyphen
. С подчеркнутой ссылкой трудно сказать.,
(используемыми RCS),:
(используемыми X.org),~
(используемыми многими программами в файлах резервных копий),… Но они поддерживаются почти всеми современными системами.При написании статьи я часто собираю библиографию файлов PDF из разных источников. Не все из них содержат правильные метаданные, что означает, что я иногда копирую и вставляю название статьи из средства просмотра PDF в имя файла. Это часто приводит к появлению новых строк в имени файла, но никогда не было проблем с инструментами, которые я использовал.
ИМХО, нет ничего «защитного» в кодировании стандарта ... стандарта, который утверждает, что в именах файлов разрешены переводы строки. Если ваш скрипт не обрабатывает все имена файлов, разрешенные в стандарте, то ваш скрипт сломан.
источник
Я никогда не видел, чтобы пользователи NORMAL использовали переводы строк в именах файлов. Похоже, что их основная цель состоит в том, чтобы (1) облегчить злоумышленникам подрыв вашей системы и (2) усложнить написание безопасных программ :-(. Однако современные Unix-подобные (такие как Linux) позволяют им так что вы должны подготовиться к ним, если вы хотите программу, которая противостоит атаке.
«Имена файлов и пути в оболочке: как это сделать правильно» показывает, как правильно это обрабатывать.
источник