Файловые системы POSIX (включая XFS) допускают каждый символ в именах файлов, за исключением NUL (0x00) и косой черты (/; 0x2f).
- NUL отмечает конец C-строки; поэтому это не разрешено в именах файлов.
- / - разделитель каталогов, поэтому он не разрешен.
- Имена файлов, начинающиеся с точки (
.
; 0x2e), считаются скрытыми файлами. Это пользовательское пространство, а не соглашение ядра или файловой системы.
- Могут быть соглашения, которым вы следуете - например, имена файлов UTF-8 - в этом случае, есть много, намного больше ограничений, включая какую форму нормализации использовать.
Теперь вы, вероятно, хотите запретить и другие вещи; Имя файла со всевозможными странными символами не доставляет удовольствия. Я настоятельно рекомендую подход белого списка.
Кроме того, при обработке имен файлов остерегайтесь записи ..
в каждом каталоге. Вы не хотите проходить его и разрешать произвольный путь.
Источник: Single Unix Spec v. 3, §3.169 , "символы, составляющие имя, могут быть выбраны из набора всех значений символов, кроме символа косой черты и нулевого байта."