В Linux возможно создавать файлы с табуляциями, переносами строк и другими управляющими символами в имени.

Вот пример команды, которая создаёт такой дикий файл:

touch $'Иванов\t\t100руб.\nПетров\t\t200руб.\nСидоров\t\t150руб.'

Здесь надо обратить внимание на конструкцию $'строка'. Именно она позволяет внедрить в имя символы, которые для имён вообще не предназначены.

Выражения вида $'строка' обрабатываются особым образом. Выражение заменяется строкой, в которой предваренные обратным слешем символы заменяются в соответствии со стандартом ANSI C. Управляющие последовательности, начинающиеся с обратного слеша, декодируются следующим образом:

a	сигнал (звонок)
b	забой
e	управляющий символ
f	прогон страницы
n	перевод строки
r	возврат каретки
t	горизонтальная табуляция
v	вертикальная табуляция
\	обратный слеш
'	апостроф
\nnn	символ с кодом ASCII nnn в восьмеричном виде (от одной до трех цифр)
xnnn	символ с кодом ASCII nnn в шестнадцатеричном виде (от одной до трех цифр)

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

Строка в двойных кавычках, перед которой идет символ доллара ($), будет преобразована в соответствии с текущей категорией локализации (locale). Если текущая категория локализации - C или POSIX, символ доллара игнорируется. Если строка преобразована и заменена, результат помещается в двойные кавычки.

Без него все управляющие символы просто вырезаются.

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

Или в табах текстового редактора gedit.

Для доступа же к такому файлу из консоли (для удаления, редактирования или просмотра содержимого) нужно ввести его полное имя, используя структуру с символом «$», как при создании. Автодополнение по кнопке Tab будет работать не во всех случаях. Например, оно корректно обработает переносы строк, но не сможет справиться с табуляцией.

В который раз убеждаюсь, что у этой ОС практически нет ограничений.

Единственные символы, которые нельзя использовать в именах файлов в Linux — это значок «/» (дробь, слэш), разделяющий каталоги, и код \0, задающий конец имени файла.



oermolaev
2011.07.28 09:43:07
#cid4135

Ответить

попробовал создать - действительно, в Наутилусе смотрится прикольно :)

Имя
2011.07.28 10:33:55
#cid4138

Ответить

Ага, практически нет, только длина файла максимум 256 символов.

2011.07.28 14:27:11
#cid4141

Ответить

Ага, практически нет, только длина файла максимум 256 символов.

255. Последний символ не в счёт, он показывает конец имени. Это естественное ограничение.

Имя
2011.07.28 18:35:34
#cid4155

Ответить

И чиего же в нём есстесственного?

2011.07.28 20:59:38
#cid4158

Ответить

И чиего же в нём есстесственного?

А в какой файловой системе нет ограничений на имя файла?

Таблица файлов — это база данных (если упрощённо). Таблица базы со статичными полями имеет ряд преимуществ, например значительно ускоряет работу с данными из этой таблицы.

Размер под имя файла был выбран в 255 байт, как не слишком маленький (можно делать достаточно длинные имена) и не слишком большой (при котором возникнет неэффективное использование дискового пространства).

Да, речь идёт про ext2, ext3 и ext4.

Для NTFS сделали по-другому. Там ограничение на 255 символов юникода (а не байт), но это ограничение накладывается на абсолютный путь к файлу, то есть в имя файла входят имена всех вышестоящих каталогов.

Имя
2011.07.28 21:12:27
#cid4159

Ответить

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

2011.07.28 21:31:53
#cid4161

Ответить

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

На ext могут помочь вложенные каталоги. В конце концов, тут ограничение на единственный элемент пути (на отдельную папку или файл), а не на весь путь.

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