Что означает ~ в пути к файлу?

43

Что ~означает абсолютный путь к файлу?

Я вижу это в выводе таких вещей, как сценарии сборки, но путь не существует.

blade34r
источник
25
Какая операционная система?
ChrisF
Не для Windows по умолчанию это кость-н - ролл?
Pacerier

Ответы:

35

Обычно это означает, что домашний каталог пользователя, например, ~mike/будет mikeдомашним каталогом пользователя, ~/будет вашим собственным домашним каталогом. Тем не менее, остается неясным , мне ли ~/и ~mike/следует считать абсолютным или относительным; похоже, это зависит от приведенного определения (если кто-то может придумать авторскую ссылку, пожалуйста, оставьте комментарий).

Обратите внимание, что я говорю о системах на основе Unix здесь.

Смотрите http://en.wikipedia.org/wiki/Home_directory#Unix

Адриан Муат
источник
3
Они являются абсолютными, потому что они являются синонимами для абсолютных путей: в UNIX абсолютный путь может быть выведен из содержимого /etc/loginфайла. Расширение традиционно выполняется оболочкой, но любой язык, у которого есть претензии на «написание сценариев», тоже сделает это.
Чарльз Стюарт
2
+1: я не знал об этом ~username/.
Вуфферс
2
Интересно, что Windows PowerShell также принимает ~в качестве синонима домашнюю директорию пользователя.
Джои
1
Джеффри Сновер сказал, что PowerShell изначально был основан на VIM / EMAC
Anonymous Type
1
@ Чарльз Стюарт, возможно, по крайней мере ~ / относителен, поскольку это зависит от контекста пользователя. Кроме того, некоторые ссылки определяют абсолютный путь как путь, заданный из корня файловой системы, что, очевидно, не является таковым. Если у вас есть ссылка на ваше заявление, пожалуйста, поделитесь!
Адриан Муат
21

На самом деле оба ответа Адриана Муата и studiohack верны.
В операционных системах с ограниченным соглашением об именах (более старая версия Windows / DOS и т. Д.) Это означает длинное имя.

e.g. "c:\program files\" is equivalent to "c:\progra~1\"

В некоторых операционных системах (а именно Unix) это означает home-dir (и может рассматриваться как абсолютный, но не канонический путь).
e.g."/a/vol01/usr/mike/" might be shortened to "~/mike/"
* где «usr» - домашний каталог.

Эран
источник
2
В контексте сценариев сборки это, вероятно, версия, ориентированная на Unix.
Чарльз Стюарт
2
Unix-пути обычно используют косые черты, а не обратную.
Торбен Гундтофте-Бруун
@torbengb, правда ... опс
Эран
1
Небольшое исправление к отличному ответу Ксенороза. Имена файлов, такие как «progra ~ 1», не предназначены для более старых ОС. Моя система Windows 7 все еще использует их. (Для просмотра сделайте dir / x.) Это устаревшая функция, которая поддерживает старое программное обеспечение, которое не знает о длинных именах файлов в современных системах. Старое программное обеспечение считает, что все имена файлов соответствуют соглашению 8.3 . Когда имя файла не работает с этим соглашением, файловая система автоматически создает второе, 8.3-совместимое имя.
Исаак Рабинович
12

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

Источник: именование файлов, путей и пространств имен - короткие и длинные имена - MSDN

(Часть пути вниз по странице ...)

StudioHack
источник
Хм, не совсем подходит для имен, которые содержат точки. (например, 192.168.1.1или somefile.namewithdot)
Pacerier
5

И если вы занимаетесь программированием на ASP.NET, это означает верхний уровень веб-сайта; вместо того, чтобы перемещаться с помощью ../../images/some_image.jpg (и неправильно указывать уровень вложенности!), вы можете просто сказать ~ / images / some_image.jpg

noonand
источник
2
/images/some_image.jpgдолжен привести вас к корню любого веб-сайта. Какие дополнительные функции предоставляет тильда в ASP.NET?
Сонни
7
~ приведет вас к корню веб-приложения, который не совпадает с корнем веб-сайта, если вы используете виртуальный каталог. Например, если ваш сайт установлен на myserver в виртуальном каталоге myapp, ~ / images / myimage.jpg преобразуется в myserver / myapp / images / myimage.jpg . См. Msdn.microsoft.com/en-us/library/ms178116.aspx .
MCS
1

Вот несколько советов, которые помогут вам лучше разобраться в этом:

$ readlink -f ~

$ echo $HOME

Примечание: $это соглашение для указания приглашения командной строки пользователя, оно не является частью команд.

VTEST
источник
readlink не распознается как внутренняя или внешняя команда.
Pacerier
@vtest это потому, что пример в этом комментарии для систем на основе Unix, а не Windows.
dudewad
-1

Подробнее о Windows:

  1. Если имя скрытого файла начинается с '~', то проводник Windows обрабатывает его как системный скрытый файл. Подробнее в разделе Почему скрытые файлы с лидирующей тильдой считаются сверхскрытыми?

  2. Если короткое имя файла / каталога содержит «~» (например, «c: \ ololoo ~ 1»), возможно, что соответствующее длинное имя этого файла / каталога превысит максимальную длину (MAX_PATH = 260). Разработчики должны решить эту проблему с префиксом «\\? \» (Даже в более новой Windows 10, поскольку пользователь может отключить поддержку LongPathsEnabledдлинных путей « > 260» с параметром реестра или с групповой политикой «Включить длинные пути NTFS»). Пример этого обходного пути с использованием C # можно найти в источниках библиотеки ZetaLongPaths .

oshatrk
источник