В 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
#cid4135
Ответить
попробовал создать - действительно, в Наутилусе смотрится прикольно :)
Имя
#cid4138
Ответить
Ага, практически нет, только длина файла максимум 256 символов.
#cid4141
Ответить
255. Последний символ не в счёт, он показывает конец имени. Это естественное ограничение.
Имя
#cid4155
Ответить
И чиего же в нём есстесственного?
#cid4158
Ответить
А в какой файловой системе нет ограничений на имя файла?
Таблица файлов — это база данных (если упрощённо). Таблица базы со статичными полями имеет ряд преимуществ, например значительно ускоряет работу с данными из этой таблицы.
Размер под имя файла был выбран в 255 байт, как не слишком маленький (можно делать достаточно длинные имена) и не слишком большой (при котором возникнет неэффективное использование дискового пространства).
Да, речь идёт про ext2, ext3 и ext4.
Для NTFS сделали по-другому. Там ограничение на 255 символов юникода (а не байт), но это ограничение накладывается на абсолютный путь к файлу, то есть в имя файла входят имена всех вышестоящих каталогов.
Имя
#cid4159
Ответить
Я вкурсе. Но это накладывает жутчайшие ограничения на, например, хранение музыки (в особенности класической), в директориях/файлах с информативными именами.
#cid4161
Ответить
На ext могут помочь вложенные каталоги. В конце концов, тут ограничение на единственный элемент пути (на отдельную папку или файл), а не на весь путь.
А вообще проблема, на мой взгляд, надуманная. Многие пользуются музыкальными СУБД типа айтюнса или амарока и вообще не в курсе, где у них физически файлы лежат.
Ирина
#cid92513
Ответить
Go Go