Які символи заборонено в іменах директорій Windows та Linux?


355

Я знаю, що / є незаконним у Linux, а наступне є незаконним у Windows (я думаю) * . " / \ [ ] : ; | ,

Що ще мені не вистачає?

Мені потрібен всебічний посібник і той, який враховує двобайтові символи. Зв'язок із зовнішніми ресурсами зі мною добре.

Мені потрібно спершу створити каталог у файловій системі за допомогою імені, яке може містити заборонені символи, тому я планую замінити ці символи на підкреслення. Потім мені потрібно записати цей каталог та його вміст у zip-файл (за допомогою Java), тому будь-які додаткові поради щодо імен поштових каталогів будуть вдячні.


13
Деякі символи, про які ви згадуєте, насправді дозволені в Windows. Перевірте це:echo abc > "ab.;,=[1]"
долмен

3
Також не забувайте, що <і> є незаконними у Windows.
ЩеПаркер

4
/ не є незаконним у Linux. Вам просто потрібно уникнути цього символу \ під час набору тексту.
Девід К. Єпископ

5
@ DavidC.Bishop: Ця публікація ТА підтверджує, що ядро ​​Linux заважає працювати з іменем файлу, що містить косу рису. Ви змогли змусити його працювати?
Soren Bjornstad

14
"/ не є незаконним у Linux. Вам просто потрібно уникнути цього знаком \, коли вводить його" - це твердження абсолютно неправильне. компоненти файлу файлу не можуть містити /, і вимкнення його не впливає.
Джим Балтер

Відповіді:


215

«Вичерпний посібник» із заборонених символів файлів не працює в Windows, оскільки він зберігає назви файлів, а також символи. Так, такі символи як * " ?і інші заборонені, але є нескінченна кількість імен, складених лише з дійсних символів, які заборонені. Наприклад, пробіли та крапки є дійсними символами файлів, але імена, що складаються лише з цих символів, заборонені.

Windows не розрізняє великі та малі символи, тому ви не можете створити папку з іменем, Aякщо така назва aвже існує. Гірші, здавалося б, дозволені імена, такі як PRNі CONта багато інших, зарезервовані та заборонені. У Windows також є кілька обмежень по довжині; ім'я файлу, дійсне в одній папці, може стати недійсним, якщо його перенести в іншу папку. Правила іменування файлів і папок містяться в документах Microsoft.

Загалом, не можна використовувати створений користувачем текст для створення імен директорій Windows. Якщо ви хочете , щоб дозволити користувачам ім'я все , що вони хочуть, ви повинні створити безпечні імена , як A, AB, і A2ін., Зберігати призначені для користувача згенеровані імена та їх еквіваленти в шляху файлу даних програми, а також виконувати відображення шляху в додатку.

Якщо ви абсолютно повинні дозволити створені користувачем імена папок, єдиний спосіб визначити, чи є вони недійсними, - це ловити винятки і вважати, що ім’я є невірним. Навіть це загрожує небезпекою, оскільки винятки, заборонені для забороненого доступу, офлайн-накопичувачів та місця на диску, збігаються з тими, які можуть бути викинуті за недійсні імена. Ви відкриваєте одну величезну банку, яка може нашкодити.


11
Ключова фраза із посилання MSDN - це "[та ін] символ, який цільова файлова система не дозволяє". У Windows можуть бути різні файлові системи. Деякі можуть дозволити Unicode, інші - ні. Взагалі єдиний безпечний спосіб перевірити ім’я - спробувати його на цільовому пристрої.
Адріан Маккарті

72
Існують деякі вказівки, і "існує нескінченна кількість імен, складених лише з дійсних символів, які заборонені" не є конструктивним. Точно так же «Windows не розрізняє між великими та малими літерами» дурне виключення - OP запитує про синтаксис , а не семантики, а не правих однодумців не було б сказати , що ім'я файлу , як A.txtбув недійсним , тому що a.TXTможе існувати.
Бородін

9
COPY CON PRNозначає прочитати з клавіатурного вводу або можливий stdin та скопіювати його на принтерний пристрій. Не впевнений, що він все ще діє на сучасних вікнах, але, безумовно, був давно. За старих часів ви могли використовувати його для введення тексту, а принтер з матричним принтером просто виводить його.
AntonPiatek

6
"не конструктивна" - навпаки, це факт. Не конструктивна - войовничість Бородіна.
Джим Балтер

3
"Загалом, ви не можете використовувати створений користувачем текст для створення імен директорій Windows." <- Якщо ви хочете це зробити, ви можете просто мати білий список символів, і він значною мірою спрацює, якщо ви можете проігнорувати вже існуючу проблему.
Кейсі

532

Давайте все будемо просто і відповімо на питання спочатку.

  1. Забороненими символами для друку ASCII є:

    • Linux / Unix:

      / (forward slash)
      
    • Windows:

      < (less than)
      > (greater than)
      : (colon - sometimes works, but is actually NTFS Alternate Data Streams)
      " (double quote)
      / (forward slash)
      \ (backslash)
      | (vertical bar or pipe)
      ? (question mark)
      * (asterisk)
      
  2. Недруковані символи

    Якщо ваші дані надходять із джерела, яке дозволило б недруковувати символи, то для перевірки є ще щось.

    • Linux / Unix:

      0 (NULL byte)
      
    • Windows:

      0-31 (ASCII control characters)
      

    Примітка. Хоча в файлових системах Linux / Unix законно створювати файли з символами керування в імені файлів, користувачі можуть бути кошмаром, щоб мати справу з такими файлами .

  3. Зарезервовані імена файлів

    Наступні імена файлів зарезервовані:

    • Windows:

      CON, PRN, AUX, NUL 
      COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
      LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
      

      (як самостійно, так і з довільними розширеннями файлів, наприклад LPT1.txt).

  4. Інші правила

    • Windows:

      Імена файлів не можуть закінчуватися пробілом або крапкою.


5
Більшість файлових систем Windows не обмежується 8-бітовими символами. Є багато інших 8-бітових символів (NUL, керуючих символів), які заборонені в Windows. Навіть зважаючи на те, що запитуючий не дозволить запитувачеві "створити каталог у файловій системі", як він запитав, оскільки існує нескінченна кількість недійсних імен каталогів, що складаються із заборонених символів.
Dour High Arch

38
Інші сказали, що це вже не є конструктивним. Коли я прийшов сюди шукати відповідь, я хотів, щоб список, який я мав зібрати в іншому місці: Який символ відфільтрувати з введення користувача при створенні гарної спроби дійсного імені файлу. Питання, якщо символи разом стають недійсними, також може потребувати певної деталізації.
Крістофер Йозбек

5
Символ NULL також заборонений в Linux.
Ден Джонс

3
Нові лінії не заборонені в Linux. Я б стверджував, що вони повинні бути, хоча ... і якщо NUL заборонено в Linux, то він заборонений для Windows, він виконує ту саму мету.
Алькаро

11
@Soaku: звичайно, ні, оскільки світ не обертається навколо Microsoft. Навіщо додавати зайві обмеження, коли є лише два символи, які абсолютно необхідно заборонити?
firegurafiku

67

У Linux та інших системах, пов’язаних з Unix, є лише два символи, які не можуть відображатися в імені файлу чи каталогу, а це NUL '\0'і коса риса '/'. Косою косу рису можна, звичайно, відобразити у назві шляху, розділяючи компоненти каталогів.

Слух 1 свідчить, що Стівен Борн (з «оболонки» слави) був каталог , що містить 254 файлів, по одному для кожної букви (код символу) , який може з'явитися в імені файлу ( за винятком /, '\0'а ім'я .було поточним, звичайно ). Він був використаний для тестування оболонки Борна і регулярно спричиняв загрозу для неохайних програм, таких як програми резервного копіювання.

Інші люди висвітлювали правила Windows.

Зауважте, що MacOS X має файлову систему, нечутливу до регістру.


1 Саме Керніган і Пайк з Практики програмування сказали стільки ж у Розділі 6, Тестування, §6.5 Стресові тести:

Коли Стів Борн писав свою оболонку Unix (яка стала називатися оболонкою Bourne), він створив каталог з 254 файлів з одноіменними іменами, по одному на кожне значення байта, за винятком '\0'і косою рисою, два символи, які не можуть з'явитися в Unix назви файлів. Він використовував цей каталог для всіх видів тестів на відповідність шаблонів і токенізації. (Тестовий каталог, звичайно, був створений програмою.) Згодом цей каталог був базою програм для прогулянок файловими деревами; це випробувало їх на знищення.

Зауважте, що у каталозі повинні бути записи, .і .., мабуть, це було 253 файли (та 2 каталоги) або 255 записів імен, а не 254 файли. Це не впливає на ефективність анекдоту чи ретельне тестування, яке він описує.


1
254 файли? А як щодо utf8?
j_kubik

20
254 файли - це всі односимвольні імена файлів, по одному на символ, дозволене в імені файлу. UTF-8 не було навіть відблиску в очі, коли Стів Борн написав оболонку Борна. UTF-8 встановлює правила щодо дійсних послідовностей байтів (і забороняє байти 0xC0, 0xC1, 0xF5-0xFF взагалі). Інакше це не сильно відрізняється - на рівні деталізації я обговорюю.
Джонатан Леффлер

1
Дисковий роздільник каталогів для файлових систем MacOS HFS + - це насправді ':', а не '/'. ОС зазвичай (напевно, завжди) робить правильно, коли ви працюєте з * nix API. Але не сподівайтеся, що це надійно відбудеться, якщо ви переходите до світу OSX, наприклад, з яблучним сценарієм. Схоже, що API какао використовують / та приховує: від вас теж, але я впевнений, що старі API вуглецю цього не роблять.
Ден Пріттс

@DanPritts Я створив власну шрифтову / кольорову схему в налаштуваннях Xcode, називаючи її /в імені. Це спричинило деякі проблеми, оскільки він створив новий каталог із схемою в.
Андреас,

Зауважте, що якщо в каталозі є двокрапка у своєму імені, ви не можете додати каталог до Unix PATH змінної оскільки двокрапка використовується як роздільник (крапка з комою в Windows). Отже, програми в такому каталозі повинні бути або запущені з іменем шляху, який визначає, де він (може бути відносним або абсолютним), або ви повинні знаходитись в каталозі і мати крапку ( .поточний каталог) у PATH, що широко вважається як небезпечний.
Джонатан Леффлер

36

Замість створення чорного списку символів ви можете використовувати білий список . Зважаючи на все, діапазон символів, що мають сенс у контексті імені файлів чи каталогів, досить короткий, і якщо у вас є певні дуже конкретні вимоги до іменування, ваші користувачі не зможуть застосувати його до вашої програми, якщо вони не зможуть використовувати всю таблицю ASCII.

Це не вирішує проблему із зарезервованими іменами в цільовій файловій системі, але за допомогою білого списку легше пом'якшити ризики у джерелі.

У цьому дусі це коло персонажів, які можна вважати безпечними:

  • Букви (az AZ) - також, якщо потрібно, символи Unicode
  • Цифри (0-9)
  • Підкреслення (_)
  • Дефіс (-)
  • Космос
  • Крапка (.)

І будь-які додаткові безпечні символи, які ви хочете дозволити. Крім цього, потрібно просто застосувати деякі додаткові правила щодо пробілів і крапок . Зазвичай цього достатньо:

  • Ім'я повинно містити принаймні одну букву чи цифру (щоб уникнути лише крапок / пробілів)
  • Ім'я має починатися з літери або цифри (щоб уникнути провідних крапок / пробілів)
  • Ім'я може не закінчуватися крапкою або пробілом (просто обріжте ті, якщо вони є, як це робить Explorer)

Це вже дозволяє досить складні та безглузді назви. Наприклад, ці імена можливо за допомогою цих правил та матимуть дійсні імена файлів у Windows / Linux:

  • A...........ext
  • B -.- .ext

По суті, навіть маючи так мало білих символів, ви все-таки повинні вирішити, що насправді має сенс, і затвердити / відрегулювати ім’я відповідно. В одному зі своїх застосувань я використовував ті ж правила, що і вище, але позбавив всі повторювані точки і пробіли.


15
А як щодо моїх користувачів, які не говорять англійською мовою, яких би це все накрутило?
пх

2
@pkh: Як я вже згадував у своєму дописі, ви додасте будь-які потрібні символи Unicode у свій білий список. Діапазони символів зазвичай можна задати досить легко, особливо якщо ви використовуєте, наприклад, регулярні вирази.
AeonOfTime

2
Ми використовуємо білий підхід, але не забувайте, що в Windows вам потрібно керувати зарезервованими рядками, незалежними від регістру, як-от імена пристроїв (prn, lpt1, con) та. і ..
tahoar

2
Ви пропустили обмеження Windows: не повинно закінчуватися крапкою або пробілом.
Мартін Боннер підтримує Моніку

1
"Враховуючи все, діапазон символів, який має сенс у контексті імені файлу чи каталогу, досить короткий." Можливо, для деяких випадків використання. Я зараз працюю над проектом, що включає медіа-файли на 20 мовах, і назви файлів повинні відображати назву медіа-елемента, оскільки кінцеві користувачі знайдуть вміст саме таким чином. Багато імен використовують розділові знаки. Будь-яке обмеження символів імені файлу несе ціну, тому в цьому випадку ми повинні мінімізувати обмеження. У цьому випадку використання діапазон символів, які не мають сенсу в імені файлу, набагато коротший і простіший, ніж у тих, що роблять.
LarsH

29

Найпростіший спосіб змусити Windows сказати вам відповідь - це спробувати перейменувати файл через Explorer і ввести / для нового імені. Windows спливає вікно повідомлень, у якому повідомлятиметься про список незаконних символів.

A filename cannot contain any of the following characters:
    \ / : * ? " < > | 

https://support.microsoft.com/en-us/kb/177506


28

Ну, якщо тільки в дослідницьких цілях, то найкраще поглянути на цю запис у Вікіпедії на Імена файлів .

Якщо ви хочете написати портативну функцію для перевірки введення користувача та створення назви файлів на основі цього, коротка відповідь - ні . Погляньте на такий портативний модуль, як Файл Perl :: Spec, щоб ознайомитись із усіма хмелями, необхідними для виконання такого "простого" завдання.


5

Для Windows ви можете перевірити це за допомогою PowerShell

$PathInvalidChars = [System.IO.Path]::GetInvalidPathChars() #36 chars

Для відображення кодів UTF-8 ви можете конвертувати

$enc = [system.Text.Encoding]::UTF8
$PathInvalidChars | foreach { $enc.GetBytes($_) }

$FileNameInvalidChars = [System.IO.Path]::GetInvalidFileNameChars() #41 chars

$FileOnlyInvalidChars = @(':', '*', '?', '\', '/') #5 chars - as a difference

Для тих, хто не говорить PowershelI, $ FileNameInvalidChars становить від 0x00 до 0x1F, і: "<> | *? \ /
Робін Девіс

4

У Windows 10 (2019) такі помилки заборонені помилкою при спробі їх ввести:

Ім'я файлу не може містити жодного з наступних символів:

\ / : * ? " < > |


3

Ось реалізація ac # для Windows на основі відповіді Крістофера Езбека

Він був складніший за допомогою булевого вмісту Foldder, але, сподіваємось, охоплює все

/// <summary>
/// This will replace invalid chars with underscores, there are also some reserved words that it adds underscore to
/// </summary>
/// <remarks>
/// /programming/1976007/what-characters-are-forbidden-in-windows-and-linux-directory-names
/// </remarks>
/// <param name="containsFolder">Pass in true if filename represents a folder\file (passing true will allow slash)</param>
public static string EscapeFilename_Windows(string filename, bool containsFolder = false)
{
    StringBuilder builder = new StringBuilder(filename.Length + 12);

    int index = 0;

    // Allow colon if it's part of the drive letter
    if (containsFolder)
    {
        Match match = Regex.Match(filename, @"^\s*[A-Z]:\\", RegexOptions.IgnoreCase);
        if (match.Success)
        {
            builder.Append(match.Value);
            index = match.Length;
        }
    }

    // Character substitutions
    for (int cntr = index; cntr < filename.Length; cntr++)
    {
        char c = filename[cntr];

        switch (c)
        {
            case '\u0000':
            case '\u0001':
            case '\u0002':
            case '\u0003':
            case '\u0004':
            case '\u0005':
            case '\u0006':
            case '\u0007':
            case '\u0008':
            case '\u0009':
            case '\u000A':
            case '\u000B':
            case '\u000C':
            case '\u000D':
            case '\u000E':
            case '\u000F':
            case '\u0010':
            case '\u0011':
            case '\u0012':
            case '\u0013':
            case '\u0014':
            case '\u0015':
            case '\u0016':
            case '\u0017':
            case '\u0018':
            case '\u0019':
            case '\u001A':
            case '\u001B':
            case '\u001C':
            case '\u001D':
            case '\u001E':
            case '\u001F':

            case '<':
            case '>':
            case ':':
            case '"':
            case '/':
            case '|':
            case '?':
            case '*':
                builder.Append('_');
                break;

            case '\\':
                builder.Append(containsFolder ? c : '_');
                break;

            default:
                builder.Append(c);
                break;
        }
    }

    string built = builder.ToString();

    if (built == "")
    {
        return "_";
    }

    if (built.EndsWith(" ") || built.EndsWith("."))
    {
        built = built.Substring(0, built.Length - 1) + "_";
    }

    // These are reserved names, in either the folder or file name, but they are fine if following a dot
    // CON, PRN, AUX, NUL, COM0 .. COM9, LPT0 .. LPT9
    builder = new StringBuilder(built.Length + 12);
    index = 0;
    foreach (Match match in Regex.Matches(built, @"(^|\\)\s*(?<bad>CON|PRN|AUX|NUL|COM\d|LPT\d)\s*(\.|\\|$)", RegexOptions.IgnoreCase))
    {
        Group group = match.Groups["bad"];
        if (group.Index > index)
        {
            builder.Append(built.Substring(index, match.Index - index + 1));
        }

        builder.Append(group.Value);
        builder.Append("_");        // putting an underscore after this keyword is enough to make it acceptable

        index = group.Index + group.Length;
    }

    if (index == 0)
    {
        return built;
    }

    if (index < built.Length - 1)
    {
        builder.Append(built.Substring(index));
    }

    return builder.ToString();
}

У мене є три питання: 1. Чому ви ініціалізували StringBuilderпочаткове значення ємності? 2. Чому ви додали 12 в довжину filename? 3. Чи було обрано 12 довільно, чи за цим числом задумувалася якась думка?
iiminov

2

Станом на 18.04.2017 серед відповідей на цю тему очевидний не простий чорно-білий список символів та імен файлів - і відповідей багато.

Найкраща пропозиція, яку я міг би придумати, - це дозволити користувачеві назвати файл, як йому подобається. Використовуючи оброблювач помилок, коли програма намагається зберегти файл, зафіксуйте будь-які винятки, припустіть, що саме ім'я файлу винне (очевидно, переконавшись, що шлях збереження був також нормальним), і запропонуйте користувачеві нове ім'я файлу. Для найкращих результатів розміщуйте цю процедуру перевірки в циклі, який триває доти, доки користувач не визнає це правильно або не здасться. Найкраще працював для мене (принаймні, у VBA).


1
Ваша відповідь @FCastro правильна з технічної точки зору. Однак з точки зору UX це кошмар - користувач змушений знову і знову грати в гру «наберіть щось, і я скажу вам, якщо вам це вдасться». Я скоріше побачу повідомлення (стиль попередження), яке повідомляє користувачеві, що він ввів незаконний символ, який згодом буде перетворений.
Майк

Крістофер Йозбек надав такий чорний список у 2015 році
Джим Балтер

1

Хоча єдиними незаконними символами Unix можуть бути /і NULL, хоча слід врахувати певний розгляд інтерпретації командного рядка.

Наприклад, хоча ім'я файлу 1>&2або2>&1 в Unix , такі імена файлів, як це, можуть бути неправильно інтерпретовані при використанні в командному рядку.

Так само можливо було б назвати файл $PATH, але при спробі отримати доступ до нього з командного рядка оболонка переведе $PATHйого на змінне значення.


літерали в BASH, кращий спосіб я знайшов , щоб оголосити літерали без інтерполяції $'myvalueis', наприклад: $ echo 'hi' > $'2>&1', cat 2\>\&1«привіт»
ThorSummoner

1

Труднощі з визначенням того, що є законним, а що не , вже були розглянуті та запропоновані білі списки . Але Windows підтримує більше 8-бітових символів. У Вікіпедії зазначено , що (наприклад)

Модифікатор лист товстої кишки [( Див 7 нижче ) є] іноді використовується в іменах файлів Windows , як вона ідентична товстої кишки в Segoe UI шрифт , який використовується для імен файлів. Сама [успадкована ASCII] товста кишка не дозволяється.

Тому я хочу представити набагато більш ліберальний підхід із використанням символів Unicode для заміни "незаконних". Я знайшов результат у своєму порівнянному випадку використання набагато читабельнішим. Подивіться, наприклад, у цей блок . Крім того, ви навіть можете відновити оригінальний вміст із цього. Можливий вибір та дослідження наведені в наступному списку:

  1. Замість *( U+002A * ASTERISK) ви можете використовувати один із багатьох перелічених, наприклад, U+2217 ∗ (ASTERISK OPERATOR)абоFull Width Asterisk U+FF0A *
  2. Замість того ., ви можете використовувати один з них , наприклад ,⋅ U+22C5 dot operator
  3. Замість цього "можна використовувати “ U+201C english leftdoublequotemark(Альтернативи див. Тут )
  4. Замість /( / SOLIDUS U+002F) ви можете використовувати ∕ DIVISION SLASH U+2215(інші тут )
  5. Замість \( \ U+005C Reverse solidus) ви можете використовувати ⧵ U+29F5 Reverse solidus operator( більше) )
  6. Замість [( U+005B Left square bracket) і ]( U+005D Right square bracket) ви можете використовувати, наприклад, U+FF3B[ FULLWIDTH LEFT SQUARE BRACKETта U+FF3D ]FULLWIDTH RIGHT SQUARE BRACKET( звідси більше можливостей тут )
  7. Замість цього :ви можете використовувати U+2236 ∶ RATIO (for mathematical usage)або U+A789 ꞉ MODIFIER LETTER COLON(див. Двокрапка (лист) , іноді використовується у назви файлів Windows, оскільки вона ідентична двокрапці у шрифті Segoe UI, який використовується для імен файлів. Сама двокрапка не дозволена) (Дивіться тут )
  8. Замість цього ;можна використовувати U+037E ; GREEK QUESTION MARK(див. Тут )
  9. Для |, є деякі хороші замінники , такі як: U+0964 । DEVANAGARI DANDA, U+2223 ∣ DIVIDESабо U+01C0 ǀ LATIN LETTER DENTAL CLICK( Вікіпедія ). Також коробки малюють символи містять різні інші параметри.
  10. Замість ,( , U+002C COMMA) ви можете використовувати, наприклад, ‚ U+201A SINGLE LOW-9 QUOTATION MARK(див. Тут )
  11. Для ?( U+003F ? QUESTION MARK), це хороші кандидати: U+FF1F ? FULLWIDTH QUESTION MARKабо U+FE56 ﹖ SMALL QUESTION MARK(від його повтору , ще два з блоку Dingbats , шукайте "питання")

0

Створюючи ярлики Інтернету в Windows, щоб створити ім'я файлу, він пропускає незаконні символи, за винятком косої риски, яка перетворюється на мінус.


3
"не відповідь ... відхилено - модератор переглянув ваш прапор, але не знайшов доказів на його підтвердження". Ти мусиш жартувати мене. Кращі модератори, будь ласка.
Джим Балтер

-1

У оболонках Unix ви можете цитувати майже кожного персонажа в одиничних лапках '. За винятком однієї цитати, і ви не можете висловити контрольні символи, оскільки \вона не розширена. Доступ до самої цитати з рядка, що цитується, можливий, оскільки ви можете об'єднати рядки з одинарними та подвійними лапками, як, наприклад, 'I'"'"'m'які можуть бути використані для доступу до файлу під назвою"I'm" (тут також можливий подвійний лапок).

Тому вам слід уникати всіх контрольних символів, оскільки вони надто складно ввести в оболонку. Інше все ще смішно, особливо файли, що починаються з тире, тому що більшість команд читають їх як параметри, якщо у вас немає двох тире --раніше, або ви не вказали їх ./, що також приховує старт -.

Якщо ви хочете бути приємними, не використовуйте жодного символу, який оболонка використовує як синтаксичні елементи, іноді залежать від позиції, так, наприклад, ви все одно можете використовувати -, але не як перший символ; те ж саме ., ви можете використовувати його як перший символ лише тоді, коли маєте на увазі його ("прихований файл"). Коли ви маєте на увазі, імена ваших файлів - це послідовності втечі VT100 ;-), так що ls отримує результат.


Питання не в снарядах.
Джим Балтер

-8

У мене була така ж потреба і я шукав рекомендації або стандартні посилання і натрапив на цю тему. Мій поточний чорний список символів, яких слід уникати у іменах файлів та каталогів:

$CharactersInvalidForFileName = {
    "pound" -> "#",
    "left angle bracket" -> "<",
    "dollar sign" -> "$",
    "plus sign" -> "+",
    "percent" -> "%",
    "right angle bracket" -> ">",
    "exclamation point" -> "!",
    "backtick" -> "`",
    "ampersand" -> "&",
    "asterisk" -> "*",
    "single quotes" -> "“",
    "pipe" -> "|",
    "left bracket" -> "{",
    "question mark" -> "?",
    "double quotes" -> "”",
    "equal sign" -> "=",
    "right bracket" -> "}",
    "forward slash" -> "/",
    "colon" -> ":",
    "back slash" -> "\\",
    "lank spaces" -> "b",
    "at sign" -> "@"
};

4
Ви проти зауважити, що є @у списку?
PypeBros

8
Питання полягало в тому, які персонажі є незаконними. Більшість символів у вашому списку є законними.
Найджел Олдертон

6
лист b? хаха, я припускаю, що це b з lank spaces... добре, що все ще залишає декілька ... Я перейменував фотографію, (),-.;[]^_~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ.jpgале довелося змінити її назад, тому що вона виглядала сердитою ...
ashleedawg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.