Как поставить косую черту в имени файла

Обновлено: 21.11.2024

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

Тофер, активный пользователь Mac в течение последних 15 лет, с весны 2008 года является автором MacFixIt. Одно из его увлечений – устранение неполадок Mac и максимально эффективное использование компьютеров Mac и оборудования Apple дома и в офисе. рабочее место.

В классической Mac OS символы двоеточия использовались для разделения папок в пути к файлу, но в системах на основе Unix разделителем папок является косая черта. Использование этих символов в именах файлов запрещено, поскольку это может ввести систему в заблуждение при попытке доступа к файлу. Когда Apple разработала OS X, использование косой черты было принято из-за ее основы Unix, поэтому в OS X вы не можете включать настоящую косую черту в имя файла.

Это может вызвать некоторую путаницу, поскольку в Finder вы можете переименовывать файлы, добавляя косую черту; однако это связано с тем, что Finder преобразует косую черту в символы двоеточия при записи имен на диск. Символ двоеточия подходит для использования в именах файлов Unix, а косая черта — нет.

Поэтому, несмотря на возможную путаницу из-за преобразования символов в Finder, реальным ограничением в OS X является использование косой черты в фактическом имени файла, что имеет смысл, поскольку это заставит программы интерпретировать файл как находящийся в каталоге. . Несмотря на это, могут быть редкие случаи, когда косая черта может заканчиваться в именах файлов.

В относительно длинном сообщении в обсуждении Apple Discussion один пользователь столкнулся с этой проблемой: в его папке для мусора появился файл, который нельзя было удалить, поскольку в его имени содержался символ косой черты. Практически ни одна утилита не могла получить к нему доступ, так как все они интерпретировали косую черту как путь к папке, а не как часть имени файла.

Проблемы такого типа возникают очень редко и, скорее всего, связаны с использованием альтернативных операционных систем в Boot Camp или других настроек, которые позволяют им напрямую обращаться к жесткому диску Mac и записывать на него (без загрузки Mac OS). и бег). В этой настройке, если альтернативная операционная система не имеет ограничений имени файла для символа косой черты, тогда символ может быть записан на диск Mac без какого-либо преобразования, такого как Finder, преобразующий косую черту в символ двоеточия.

Если вы столкнетесь с этой проблемой, к сожалению, вы почти ничего не сможете сделать в OS X для удаления или переименования файла. Следовательно, единственный способ удалить его — получить доступ к файлу с помощью операционной системы, которая не имеет специального использования символа косой черты, например Windows. Загрузитесь в Windows, установите инструмент для чтения и записи на диски в формате HFS+, а затем найдите файл на диске OS X и удалите его.

Вопросы? Комментарии? Есть исправление? Опубликуйте их ниже или напишите нам!
Обязательно следите за нами в Твиттере и на форумах CNET Mac.

28.04.2012 16:07 6 781 12Q1_C125_G_04-17.pdf

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

3 ответа 3

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

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

Используйте обратную косую черту ( \ ) для разделения компонентов пути. Обратная косая черта отделяет имя файла от пути к нему и одно имя каталога от другого имени каталога в пути. Вы не можете использовать обратную косую черту в имени фактического файла или каталога, поскольку это зарезервированный символ, который разделяет имена на компоненты.

При необходимости используйте обратную косую черту как часть имен томов, например, " C:\" в "C:\path\file" или "\server\share" в "\server\share\path\file" для имен UNC. Дополнительные сведения об именах UNC см. в разделе «Ограничение максимальной длины пути».

Не учитывать регистр. Например, считайте имена OSCAR, Oscar и oscar одинаковыми, хотя некоторые файловые системы (например, POSIX-совместимая файловая система) могут считать их разными. Обратите внимание, что NTFS поддерживает семантику POSIX для учета регистра, но это не поведение по умолчанию. Дополнительные сведения см. в разделе CreateFile.

Обозначения томов (буквы дисков) также нечувствительны к регистру. Например, "D:\" и "d:\" относятся к одному и тому же тому.

Используйте любой символ текущей кодовой страницы для имени, включая символы Юникода и символы расширенного набора символов ( 128–255), за исключением следующего:

Целочисленное значение 0, иногда называемое символом ASCII NUL.

Символы, целочисленные представления которых находятся в диапазоне от 1 до 31, за исключением альтернативных потоков данных, где эти символы разрешены. Дополнительные сведения о файловых потоках см. в разделе «Файловые потоки».

Любой другой символ, который не разрешен целевой файловой системой.

Мне нужно создать файл с таким именем, как :>? , это возможно как-то? Windows останавливает его.

Ну, у каждого запрещенного символа есть другое значение или использование, поэтому, если имя файла или папки содержит их, это может привести к возникновению Bad Things™. Не возражаете, если я спрошу, почему вы пытаетесь это сделать?

@DMA57361, когда я делал это несколько лет назад, я кое-что тестировал. Если я правильно помню, результаты были забавными, но я не припоминаю, чтобы что-то особенно плохое происходило. В лучшем случае я просто не мог получить к ним доступ. (Хотя я предполагаю, что это может вызвать проблемы, если, например, у вас есть файлы с именами a , b и a>b и вы попытаетесь просмотреть последний файл как с использованием типа a>b . Упс.)

@moorecast, когда я сделал это несколько лет назад, я создал файлы/каталоги с фиктивными именами, а затем использовал дисковый редактор, чтобы вручную установить имена непосредственно в записях каталога. Конечно, это было на томе FAT32, так что это было очень просто. С томом NTFS было бы немного сложнее.

6 ответов 6

К сожалению, вы не можете использовать зарезервированные символы при создании папок или файлов, поскольку они являются частью системных функций.

Что я рекомендую вам сделать, так это просмотреть приложение «Карта символов» — вы можете запустить и ввести charmap .

здесь вы можете найти альтернативные символы, которые выглядят одинаково, например:

(скопируйте и вставьте их, вы увидите, что они разные)

Вместо косой черты / можно использовать символ деления ∕

Вместо двоеточия: – вы можете использовать букву-модификатор двоеточие ꞉

Раньше я использовал этот трюк в определенных ситуациях, например, когда мне нужно было поставить вопрос в имени файла (почему, почему Microsoft сделал вопросительный знак зарезервированным‽ ఠ_ఠ) К сожалению, мне пришлось остановиться использование любых символов, отличных от ASCII, потому что они вызывают проблемы с такими вещами, как программы дефрагментации, которые по какой-то причине не могут перемещать файлы, в именах которых есть символы Unicode. ಠ~ಠ

Если подумать, этот ответ на самом деле также не отвечает на вопрос. Ниже есть ответы, которые делают, так что это тоже должен быть просто комментарий.

Вы можете загрузиться с диска Linux (например, Knoppix) и смонтировать раздел NTFS.

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

Некоторые операционные системы запрещают использование определенных символов в именах файлов: (Источник из Википедии)

\ обратная косая черта Также используется в качестве разделителя компонентов имени пути в MS-DOS, OS/2 и Windows (нет разницы между косой чертой и обратной косой чертой); разрешено в имени файла Unix

<р>? знак вопроса, используемый в качестве подстановочного знака в Unix, Windows и AmigaOS; отмечает один символ. Разрешено в именах файлов Unix

* звездочка используется в качестве подстановочного знака в Unix, MS-DOS, RT-11, VMS и Windows. Отмечает любую последовательность символов (Unix, Windows, более поздние версии MS-DOS) или любую последовательность символов либо в базовом имени, либо в расширении (таким образом, «.» в ранних версиях MS-DOS означает «все файлы". Разрешено в именах файлов Unix,

: двоеточие, используемое для определения точки монтирования/диска в Windows; используется для определения виртуального устройства или физического устройства, такого как диск на AmigaOS, RT-11 и VMS; используется в качестве разделителя пути в классической Mac OS. Удваивается после имени в VMS, указывает на имя узла DECnet (эквивалентно имени узла NetBIOS (сеть Windows), которому предшествует "\".)

| вертикальная черта обозначает конвейерную обработку программного обеспечения в Unix и Windows; разрешено в именах файлов Unix

" кавычка, используемая для обозначения начала и конца имен файлов, содержащих пробелы в Windows

> больше, чем используется для перенаправления вывода, разрешено в именах файлов Unix

<р>. допустимый период, но последнее вхождение будет интерпретироваться как разделитель расширений в VMS, MS-DOS и Windows. В других операционных системах обычно рассматривается как часть имени файла, и может быть разрешено более одной точки.

Я только что столкнулся со следующим вопросом в Unix Programming Environment, классической книге Кернигана и Пайка по Unix (я нашел приведенный ниже текст на стр. 79 издания 1984 года, ISBN: 0- 13-937699-2):

Упражнение 3–6. (Каверзный вопрос) Как вставить / в имя файла (т. е. /, который не разделяет компоненты пути?

Я много лет работаю с Linux как конечный пользователь и как программист, но не могу ответить на этот вопрос. Нельзя ставить косые черты в именах файлов, это категорически запрещено ядром.Вы можете исправить свою файловую систему с помощью доступа к блочному устройству или использовать похожие символы из Unicode, но это не решение.

Я понимаю, что Linux ≠ Unix, но должен применяться тот же принцип, поскольку система должна иметь возможность однозначно извлекать иерархию каталогов из путей.

Кто-нибудь знает, о чем именно думали Керниган и Пайк, задавая этот вопрос? Каков был предполагаемый ответ? В чем именно заключается «трюк»? Или, может быть, исходная система Unix просто позволяла как-то избежать этой косой черты?

ОБНОВЛЕНИЕ:

Я связался с Брайаном Керниганом по этому вопросу, и вот что он ответил:

Следовательно, Тимоти Мартин был прав и получил зеленую галочку.

Хм. Возможно, вы могли бы создать файл, содержащий строчную букву «а», и заставить вашу систему думать, что файловая система находится в локали EBCDIC? ASCII a равен 0x61, что соответствует / в EBCDIC (кодовая страница 37)

Говорится ли в самой книге, что это вопрос с подвохом? Если это так, я думаю, это в значительной степени подтверждает, что вы не сможете найти способ сделать это по замыслу, оставив нестандартные идеи, которые вы уже изложили.

3 ответа 3

Возможно, ответ такой же, как часть ответа на вопрос с подвохом:
Как слезть со слона? Вы не знаете. Вы получаете его от гуся.

Из книги "Практика программирования" Брайана В. Кернигана и Роба Пайка, гл. 6, стр. 158:

Когда Стив Борн писал свою оболочку Unix (известную как оболочка Борна), он создал каталог из 254 файлов с односимвольными именами, по одному для каждого значения байта, кроме '\0' и косая черта, два символа, которые не могут использоваться в именах файлов Unix.

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

Я сделал это. Это было в системе UNIX, работающей на PDP-11, примерно в 1980 году. Я создал файл под названием «WhatXNow?». Затем я использовал «редактор» двоичных файлов, чтобы отредактировать дисковое устройство и изменить «X» на «/» в индексном узле (с размонтированной файловой системой).

Жертва так и не поняла, как его удалить.

Редактировать: упс, Бармар прав, я не увидел там строки о том, что устройство не исправляется. И да, это был каталог, который я редактировал, а не индекс. Давненько :-)

В вопросе говорится, что вы можете исправить свою файловую систему с помощью доступа к блочному устройству или использовать похожие символы из Unicode, но это не решение. Разве это не то, что вы описываете в своем ответе?

@Barmar: Хм, может быть, я слишком много думаю над вопросом, и исправление файловой системы - это решение, которое имелось в виду? Я не знаю.

Держу пари, это был ответ. Я помню, когда ты умел читать справочники. Возможно, давным-давно root мог их написать.

Любой сценарий, в котором / (точнее, байт, а не символ, со значением 0x2f; почти все ядра Unix намеренно игнорируют кодировку символов) попадает в запись каталога без манипулирования необработанными блоками диска. стороны, несомненно, является ошибкой в ​​ядре.

Такие ошибки время от времени случаются. Один случай, который я помню, читал примечания к патчу, заключается в том, что некоторые итерации эпохи 1990-х годов… я хочу сказать Solaris, но это может быть неправильно … предлагали сервер для AppleTalk Filing Protocol (AFP), который был классическим эквивалентом NFS в MacOS. . Проблема заключалась в том, что в классической MacOS вам вполне разрешено помещать / в компонент пути; разделитель каталогов: вместо этого. Сервер AFP должен был должен выполнять моральный эквивалент tr :/ /: при сопоставлении путей, представленных клиентами, с файлами на его диске, но они пропустили пару путей кода, и поскольку сервер был реализован внутри ядро, оно может фактически записывать неправильные записи в каталоге.

У меня есть файл с именем "Экспорт журнала вызовов: 13.01.15 - 21.04.15". rclone успешно синхронизирует его, но обрабатывает косые черты как разделители каталогов и создает длинный путь с данными в файле с именем «15». Собственный диск Google Windows заменяет специальные символы символами подчеркивания и вместо этого создает файл с именем «Экспорт журнала вызовов_ 01_13_15 - 04_21_15». Почему-то мне такой подход нравится больше.

Текст был успешно обновлен, но возникли следующие ошибки:

lvmm прокомментировал 13 мая 2015 г.

Если вы хотите, чтобы он подходил всем, сделайте его настраиваемым. Я лично голосую за более строгие ограничения в стиле MS — возможность создавать файл с двоеточием — это здорово, пока вам не придется копировать его на USB-накопитель с файловой системой FAT.

комментарий ncw от 5 октября 2015 г.

Это было частично исправлено в f50f353: : экранируется как _ для файловых систем Windows.

Однако проблема с разделителями путей / по-прежнему существует. Это необходимо исправить в коде диска.

balazer прокомментировал 25 февраля 2017 г. •

Возникла проблема с синхронизацией файлов с двоеточием из Google Диска в Windows. Если файл уже существует в месте назначения, операция синхронизации удалит его.

rclone -v sync remote:test f:\test

25.02.2017, 12:07:06 rclone: ​​Версия "v1.35-40-gb6848a3ß", начиная с параметров ["rclone" "-v" "sync" "remote:test" "f: \test"]
25.02.2017 12:07:06 Локальная файловая система по адресу \?\F:\test: окно изменения составляет 1 мс
25.02.2017 12:07:06 Диск Google root 'test': Чтение ""
25.02.2017 12:07:07 Google drive root 'test': Завершено чтение ""
25.02.2017 12:07:07 Локальная файловая система at \?\F:\test: ожидание завершения проверки
25.02.2017 12:07:07 Локальная файловая система в \?\F:\test: ожидание завершения передачи
2017 /02/25 12:07:07 Локальная файловая система в \?\F:\test: замена недопустимых символов в "\test\test: name" на "\\?\F:\test\test_ name"
2017/02/25 12:07:07 test: name: Скопировано (новое)
2017/02/25 12:07:07 Ожидание окончания удаления
2017/02/25 12:07 :07 test_ name: Удалено
25.02.2017 12:07:07
Передано: 0 байт (0 байт/с)
Ошибок: 0
Проверок: 1
/>Передано: 1
Прошло время: 1,3 с
25.02.2017 12:07:07 Перейти подпрограммы на выходе 7

Читайте также: