Comment renommer un fichier en .. (dot dot)?

26

Apparemment, vous pouvez renommer le fichier en... .

Si j'étais fou, comment renommer un fichier en ..ou .? Un tel nom de fichier est-il même autorisé?

La barre oblique inverse ne semble pas désactiver la signification spéciale du point:

$ mv test \.
mv: `test' and `./test' are the same file
gronostaj
la source
11
.et ..existent déjà. Et dot n'a pas de signification particulière.
ctrl-alt-delor
2
Je me demande si vous pouvez créer des fichiers nommés .ou à ..partir de Windows sur un support externe FATou un NTFSsupport, puis essayez de le monter dans un système basé sur Unix. Hm ...
IQAndreas
3
@IQAndreas non, Windows utilise. et .. de la même manière ( superuser.com/a/571364/330318 ) que Unix. (Et bon nombre d'autres noms spéciaux: superuser.com/a/217526/330318 )
PTwr
2
@PTwr L'histoire de Windows est plus compliquée que cela. Certaines choses spéciales se produisent au niveau du système de fichiers / au niveau de l'API NT, certaines dans le sous-système Win32 et d'autres et le niveau du shell. Par exemple, la magie GUID de votre deuxième lien est au niveau du shell, donc vous ne les verrez pas dans une application de ligne de commande typique. Je ne sais pas si .et ..existent réellement dans NTFS et l'API NT ou s'ils ne sont ajoutés que par l'API Win32. Je sais qu'il existe plusieurs divergences entre l'API NT de niveau inférieur et Win32, par exemple Win32 cache plusieurs fichiers de la racine du lecteur.
CodesInChaos
@CodesInChaos pour autant que je sache, les points / points sont des instances virtuelles et sont émulés dans le pilote du système de fichiers, et c'était la même chose dans l'ancien FAT qui empruntait l' idée ( problématique ) à Unix. Selon le deuxième lien, j'avoue ne pas l'avoir lu entièrement avant de poster. Quelque chose comme ça serait probablement mieux. (mais encore une fois, celui-ci manque plein ./ .. info)
PTwr

Réponses:

25

.. n'est pas spécial, c'est juste qu'il existe déjà.

Sous Unix, Dos et MS-Windows, chaque répertoire a un répertoire .qu'il relie à lui-même, et un répertoire ..qu'il lie à son répertoire parent (ou auto si répertoire racine).

Si ..et .sont spéciaux, c'est uniquement parce que vous ne pouvez pas les supprimer (en fait vous pouvez, vous supprimez simplement le répertoire qui les contient).

Par conséquent, vous ne pouvez nommer aucun (autre) fichier .ou ...

Cependant , vous pouvez créer des fichiers ..., \, , .. (note il y a un espace après le .., mais vous pouvez à peine voir ici, ou facilement en vous liste des répertoires) ou tout autre nom que vous aimez; Le seul caractère réservé est /(Avertissement - détails avancés: et null, null est un caractère spécial, utilisé pour rien sauf pour marquer la fin des choses et parfois comme séparateur). .n'a pas de signification particulière: ni pour les noms de fichiers, ni pour le noyau, ni pour le shell, il n'a pas besoin de s'échapper. En fait, si un nom de fichier commence par un, .il est spécial, le fichier est normalement caché, mais il n'a pas besoin d'être échappé.

De côté

Ce comportement de fichier caché est apparu dans une première implémentation de l' lsendroit où l'auteur voulait se cacher .et .., ils ont donc écrit du code pour masquer tous les fichiers commençant par un .. D'autres utilisateurs ont remarqué ce bogue / cette fonctionnalité et ont commencé à créer des fichiers commençant par un .quand ils voulaient que le fichier soit caché.

Explication de la question liée

Dans la question que vous liez au questionneur essaye de déplacer le fichier vers le répertoire parent ..mais finit par être renommé ..., les fichiers commençant par un point sont par défaut masqués, c'est pourquoi ils ne peuvent pas le trouver.

Lors de l'utilisation de mv dans le formulaire mv a b

  • Si vous vous y déplacez .est en réalité une opération non, mais le mvtraite comme une erreur.
  • Si vous y accédez, ..le fichier sera déplacé vers le répertoire parent.
ctrl-alt-delor
la source
1
Qu'entendez-vous par If you move to . it is effectively a no operation? Ce n'est pas un "no op" c'est une erreur si vous essayez de déplacer un fichier de A vers B quand A et B sont la même chose. Une démonstration plus pratique de cette erreur est mv foo ../some_dir/fooou mv foo some_subdir/../foo.
Brandin
7
Pour une certaine définition de «caractère», NUL (0x00) est également limité dans les noms de fichiers et de répertoires.
user117529
1
La distinction entre le caractère réservé (ie /et NUL) et le nom réservé (ie .et ..) pourrait être clarifiée. Il convient également de souligner qu'au .début du nom, la signification particulière n'est présente qu'au niveau de la couche application et non dans le noyau ou l'API d'appel système.
kasperd
Je pense que votre espace s'est perdu.
nyuszika7h
1
..et . sont spéciaux: vous ne pouvez pas les déplacer ou les supprimer. Mais ils ne sont pas spéciaux lors du déplacement de fichiers vers eux.
reinierpost
52

Vous ne pouvez pas renommer un fichier en .ou ..parce que tous les répertoires contiennent déjà des entrées pour ces deux noms. (Ces entrées pointent vers des répertoires et vous ne pouvez pas renommer un fichier en répertoire.)

mv détecte le cas où la destination est un répertoire existant et l'interprète comme une demande de déplacement du fichier dans ce répertoire (en utilisant son nom actuel).

Les barres obliques inverses n'ont rien à voir avec cela, car ce .n'est pas un métacaractère shell. \.et .sont les mêmes bash.

cjm
la source
9

Le problème est que vous déplacez un fichier vers un répertoire. Cela peut échouer.

Je vais vous dire comment c'était autrefois.

mkdir lisait essentiellement ceci (pendant que j'écris ceci en sh, il était vraiment écrit en C et setuid-root).

mknod d $1
ln -d $1 $1/.
ln -d `dirname $1` $1/..

Comme vous pouvez le voir, il n'y a pas grand chose de spécial. et .. à part le fait qu'ils sont créés pour vous par mkdir et existent déjà. Il y a maintenant du code qui dit que vous ne pouvez pas les supprimer, mais ce n'était pas toujours le cas.

rmdir ressemblait à ceci:

rm -d $1/..
rm -d $1/.
rm -d $1
Joshua
la source
+1 pour la leçon d'histoire, et en ajoutant quelque chose de mal couvert.
ctrl-alt-delor