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
.
et..
existent déjà. Et dot n'a pas de signification particulière..
ou à..
partir de Windows sur un support externeFAT
ou unNTFS
support, puis essayez de le monter dans un système basé sur Unix. Hm ....
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.Réponses:
..
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'
ls
endroit 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
.
est en réalité une opération non, mais lemv
traite comme une erreur...
le fichier sera déplacé vers le répertoire parent.la source
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 estmv foo ../some_dir/foo
oumv foo some_subdir/../foo
./
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...
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.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êmesbash
.la source
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).
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:
la source