Назви файлів Linux / Windows / Unix /…: Які символи дозволені? Які не розглядаються?


43

Які символи дозволені та які з них потрібно вимкнути в командному рядку в різних операційних системах?


Нижче наведено кілька корисних відповідей, але чого ви намагаєтесь досягти? Кодування коду власного білого списку білого списку, мабуть, не найкращий маршрут.
medina

Дякую всім! Усі відповіді корисні. Для чого мені потрібна інформація: я пишу інструмент, який би тегував файли у всій файловій системі, змінюючи їхні імена (без метаданих).
java.is.for.desktop

Дивіться також відповідь на суперусер .
певік

Відповіді:


27

У статті Вікіпедії про Імена файлів обговорюються символи імен файлів .

Цей твір може бути інформативним: Виправлення імен файлів Unix / Linux / POSIX .

У цій статті порівнюються ОС X та Windows XP: X проти XP: Заборонені символи у назвах файлів (PDF, див. Пр. 64-66).

Те, що не повинно бути у назвах файлів за 1000 доларів Alex

Я не знаю , які символи повинні бути ип втік, але в Linux, ймовірно , це не ідея добре , щоб уникнути символів , які можуть мати особливе значення , наприклад, «п» (переклад рядка), (закладка) «т» і інші, але це взагалі не проблема в роботі з файлами. Можливо, ви маєте на увазі "втекли", а не "без нагляду". Найпоширеніші з них - це те, що оболонка буде інтерпретувати, наприклад, пробіл, ">", "<" і т. Д. Дивіться деякі статті, які я пов’язував для обговорення цих питань.


7
Це насправді не відповідь - вся інформація є зовнішньою. І деякі з цих посилань зараз розірвані.
Стів Беннетт

26

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

Ні в якому разі не потрібно уникати жодних символів в імені файлу, за винятком випадків, щоб не інтерпретуватися оболонкою.


Другий момент заслуговує наголос. Зазвичай "утеча" відноситься до механізму оболонки, який дозволяє користувачеві задавати рядки (наприклад, імена шляхів), які містять символи, до яких оболонка в іншому випадку оброблятиметься особливим чином. Якщо ОП означає використання чогось на кшталт «відсоткове кодування» для кодування інакше заборонених символів, то це суто прикладний рівень «протокол імені шляху», який кожна прийнята програма повинна прийняти (або ні).
Кріс Джонсен

Я сканую папку з readdir, потім намагаюся відкрити файли з іменами, які вона повертає. Деякі з них не вдається відкрити за допомогою ENOENT, що підказує навіть для ОС, іноді вам доведеться бігти?
gman

13

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

\ / : * ? " < > |

Хороша довідка тут:

Іменування файлів, шляхів та просторів імен
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

Далі Microsoft заявляє:

"... на платформах робочого столу на базі Windows, недійсні символи шляху можуть включати символи ASCII / Unicode з 1 по 31, а також цитата ("), менше (<), більше (>), pipe (|), зворотний простір (\ b), null (\ 0) та вкладка (\ t). "

http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx


Я пам’ятаю, як кілька років тому читав, що Windows в режимі користувача має ці обмеження, а також нечутливі до регістру ("ABC.txt" === "abc.txt"). Однак у режимі ядра Windows є менше обмежень і чутливі до регістру ("ABC.txt"! == "abc.txt" так само, як * NIX). Однак для всіх намірів і цілей вищезазначені символи застосовуватимуться до більшості програм, оскільки вони працюють у режимі користувача.
CubicleSoft

Я можу уникнути \ / : * ? " < > |всіх і створити їх за допомогою mkdir в моїй системі GNU / Linux. Ви також можете mkdir '?'створити ?каталог. Я використовував файлову систему ramdisk та XFS, щоб перевірити це.
S.Goswami

5

У Linux та інших сумісних системах POSIX "/" зарезервовано як роздільник каталогів, а "\ 0" (символ NULL) позначає кінець рядка. Все інше дозволено.


1
Хоча дуже рекомендується уникати нових рядків, вкладок, контрольних символів тощо, а також переконатися, що ім'я файлу є дійсним UTF-8.
Flimm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.