Que signifie le ~ dans un chemin de fichier?

43

Qu'est-ce que cela ~signifie dans un chemin de fichier absolu?

Je vois ceci dans la sortie de choses comme des scripts de construction mais le chemin n’existe pas.

lame34r
la source
25
Quel système d'exploitation?
ChrisF
Windows n'est-il pas le jet de dés par défaut ?
Pacerier

Réponses:

35

Normalement, cela signifie que le répertoire de base de l'utilisateur, par exemple, ~mike/serait le répertoire de base de l'utilisateur mike, ~/serait votre propre répertoire de base. Cependant, il m'est difficile de savoir si ~/et ~mike/doit être considéré comme absolu ou relatif; cela semble dépendre de la définition donnée (si quelqu'un peut trouver une référence faisant autorité, merci de poster un commentaire).

Notez que je parle ici de systèmes basés sur Unix.

Voir http://en.wikipedia.org/wiki/Home_directory#Unix

Adrian Mouat
la source
3
Ils sont absolus, car ils sont synonymes de chemins absolus: sous UNIX, le chemin absolu peut être déduit du contenu du /etc/loginfichier. L’expansion est traditionnellement effectuée par le shell, mais tout langage ayant des prétentions de "script" le fera aussi.
Charles Stewart
2
+1: Je n'étais pas au courant ~username/.
Wuffers
2
Il est intéressant de noter que Windows PowerShell accepte également ~le synonyme du répertoire de l'utilisateur à la maison.
Joey
1
Jeffery Snover a déclaré que PowerShell était basé à l'origine sur les VIM / EMAC
Type anonyme
1
@ Charles Stewart sans doute au moins ~ / est relatif car il dépend du contexte de l'utilisateur. De plus, certaines références définissent un chemin absolu comme étant donné par la racine du système de fichiers, ce qui n’est évidemment pas le cas. Si vous avez une référence pour votre déclaration, partagez-la!
Adrian Mouat
21

En fait, les deux réponses d'Adrian Mouat et de studiohack sont vraies.
Dans les systèmes d'exploitation avec convention de dénomination limitée (ancienne version de Windows / DOS, etc.), cela signifie un nom long.

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

Dans certains systèmes d'exploitation (notamment Unix), cela signifie répertoire-répertoire (et peut être considéré comme un chemin absolu mais non canonique).
e.g."/a/vol01/usr/mike/" might be shortened to "~/mike/"
* où 'usr' est le répertoire d'accueil.

Eran
la source
2
Dans le contexte des scripts de construction, il s'agit probablement de la version centrée sur Unix.
Charles Stewart
2
Les chemins Unix utilisent généralement des barres obliques plutôt que des barres obliques inverses.
Torben Gundtofte-Bruun Le
@torbengb, true ... opps
Eran
1
Une petite correction à la réponse par ailleurs excellente de Xenorose. Les noms de fichier tels que "progra ~ 1" ne sont pas destinés aux anciens systèmes d'exploitation. Mon système Windows 7 les utilise toujours. (Faites dir / x pour voir.) Il s'agit d'une fonctionnalité héritée qui prend en charge les anciens logiciels qui ne connaissent pas les noms de fichiers longs dans les systèmes modernes. L'ancien logiciel pensait que tous les noms de fichiers respectaient la convention 8.3 . Lorsqu'un nom de fichier ne fonctionne pas avec cette convention, le système de fichiers crée automatiquement un deuxième nom, compatible 8.3.
Isaac Rabinovitch
5

Et si vous programmez avec ASP.NET, cela signifie le niveau supérieur du site Web; plutôt que de naviguer avec ../../images/some_image.jpg (et d'obtenir un niveau de nidification erroné!), vous pouvez simplement dire ~ / images / some_image.jpg

midi
la source
2
/images/some_image.jpgdevrait vous emmener à la racine de tout site Web. Quelles fonctionnalités supplémentaires le tilde fournit-il dans ASP.NET?
Sonny
7
~ vous amène à la racine de l'application Web qui n'est pas la même que la racine du site Web si vous utilisez un répertoire virtuel. Par exemple, si votre site Web est installé sur myserver dans le répertoire virtuel myapp, ~ / images / myimage.jpg sera résolu en myserver / myapp / images / myimage.jpg . Voir msdn.microsoft.com/en-us/library/ms178116.aspx .
MCS
1

Voici quelques astuces qui peuvent vous aider à mieux comprendre:

$ readlink -f ~

$ echo $HOME

Remarque: $est une convention pour spécifier l'invite de ligne de commande de l'utilisateur, cela ne fait pas partie des commandes.

vtest
la source
'readlink' n'est pas reconnu comme une commande interne ou externe.
Pacerier
@vtest c'est parce que l'exemple dans ce commentaire concerne des systèmes basés sur Unix, pas Windows.
dudewad
-1

En savoir plus sur Windows:

  1. Si le nom de fichier caché commence par «~», l'explorateur Windows le traite comme un fichier caché du système. Plus d'informations dans Pourquoi les fichiers cachés avec un tilde de premier plan sont-ils traités comme étant super cachés?

  2. Si le nom de fichier / répertoire court contient '~' (comme "c: \ ololoo ~ 1"), il est possible que le nom long correspondant de ce fichier / répertoire dépasse la longueur maximale (MAX_PATH = 260). Les développeurs doivent contourner ce problème avec le préfixe "\\? \" (Même sous Windows 10 le plus récent en tant qu'utilisateur pouvant désactiver la prise en charge des chemins "> 260" avec le LongPathsEnabledparamètre de registre ou avec la stratégie de groupe "Activer les chemins longs NTFS"). Vous pouvez trouver un exemple de cette solution de contournement à l'aide de C # dans les sources de la bibliothèque ZetaLongPaths .

oshatrk
la source