Wie benenne ich eine Datei um in .. (dot dot)?

26

Anscheinend kann man die Datei umbenennen... .

Wenn ich verrückt wäre, wie würde ich die Datei in ..oder umbenennen .? Ist so ein Dateiname überhaupt erlaubt?

Backslash scheint die spezielle Bedeutung von dot nicht zu deaktivieren:

$ mv test \.
mv: `test' and `./test' are the same file
gronostaj
quelle
11
.und ..existieren bereits. Und Punkt hat keine besondere Bedeutung.
Strg-Alt-Delor
2
Ich frage mich, ob Sie Dateien mit dem Namen .oder ..von Windows auf einem externen FAToder einem NTFSDatenträger erstellen können , und dann versuchen, diese in ein Unix-basiertes System einzubinden. Hm ...
IQAndreas
3
@IQAndreas Nein, Windows verwendet. und .. ungefähr auf die gleiche Weise ( superuser.com/a/571364/330318 ) wie Unix. (Und Heck viele andere spezielle Namen: superuser.com/a/217526/330318 )
PTwr
2
@PTwr Die Windows-Geschichte ist kniffliger. Einige spezielle Dinge geschehen auf der Dateisystem- / NT-API-Ebene, einige im Win32-Subsystem und einige auf der Shell-Ebene. Beispielsweise befindet sich die GUID-Magie Ihres zweiten Links auf der Shell-Ebene, sodass Sie sie in einer typischen Befehlszeilenanwendung nicht sehen. Ich bin nicht sicher, ob .und ..tatsächlich in NTFS und der NT-API vorhanden sind oder ob sie nur von der Win32-API hinzugefügt werden. Ich weiß, dass es mehrere Diskrepanzen zwischen der NT-API der unteren Ebene und Win32 gibt, zum Beispiel versteckt Win32 mehrere Dateien vor dem Laufwerkstamm.
CodesInChaos
@CodesInChaos Meines Wissens sind dot / dotdot virtuelle Instanzen und werden im Dateisystemtreiber emuliert, und es war dasselbe in der alten FAT, die eine ( problematische ) Idee von Unix entlehnt hat . Gemäß zweitem Link gebe ich zu, ihn vor dem Posten nicht vollständig gelesen zu haben. So etwas wie dies würde man wahrscheinlich besser sein. (aber auch hier fehlt dieser eine voll ./ .. info)
PTwr

Antworten:

25

.. ist nichts besonderes, es ist nur so, dass es bereits existiert.

Unter Unix, Dos und MS-Windows verfügt jedes Verzeichnis über ein Verzeichnis ., das mit sich selbst verknüpft ist, und ein Verzeichnis .., das mit dem übergeordneten Verzeichnis (oder self, wenn Root-Verzeichnis) verknüpft ist.

Wenn ..und .sind speziell, ist es nur, weil Sie sie nicht entfernen können (tatsächlich können Sie nur das Verzeichnis entfernen, das sie enthält).

Daher können Sie keine (andere) Datei .oder benennen ...

Jedoch Sie Dateien erstellen ..., \, , .. (Anmerkung gibt es einen Raum nach dem .., aber man kann es kaum hier sehen, oder einfach in ihrer Verzeichnisliste) oder einen anderen Namen , den Sie mögen; Das einzige reservierte Zeichen ist /(Warnung - erweiterte Details: und null, null ist ein Sonderzeichen, das nur zum Markieren des Endes von Dingen und manchmal als Trennzeichen verwendet wird). .hat keine besondere Bedeutung: nicht für Dateinamen, Kernel oder für die Shell, es muss nicht maskiert werden. Wenn ein Dateiname mit einem beginnt ., ist er eigentlich etwas Besonderes. Die Datei ist normalerweise ausgeblendet, muss jedoch nicht maskiert werden.

Beiseite

Dieses Verhalten bei versteckten Dateien entstand in einer frühen Implementierung dessen, lswo der Autor sich verstecken wollte, .und ..so schrieben sie Code, um alle Dateien auszublenden, die mit a beginnen .. Andere Benutzer bemerkten diesen Fehler / diese Funktion und begannen mit dem Erstellen von Dateien, beginnend mit dem .Zeitpunkt, an dem die Datei ausgeblendet werden soll.

Erklärung der verknüpften Frage

In der Frage, die Sie mit dem Fragesteller verknüpfen, wird versucht, die Datei in das übergeordnete Verzeichnis zu verschieben. Am Ende wird die Datei ..jedoch in umbenannt .... Dateien, die mit einem Punkt beginnen, werden standardmäßig ausgeblendet, weshalb sie nicht gefunden werden können.

Bei Verwendung von mv im Formular mv a b

  • Wenn Sie dorthin wechseln, .ist dies praktisch eine Nulloperation, die jedoch mvals Fehler behandelt wird.
  • Wenn Sie dorthin wechseln, ..wird die Datei in das übergeordnete Verzeichnis verschoben.
Strg-Alt-Delor
quelle
1
Was meinst du damit If you move to . it is effectively a no operation? Es ist kein "no op". Es ist ein Fehler, wenn Sie versuchen, eine Datei von A nach B zu verschieben, wenn A und B dasselbe sind. Weitere praktische Demonstration dieses Fehlers ist mv foo ../some_dir/foooder mv foo some_subdir/../foo.
Brandin
7
Für einige Definitionen von 'Zeichen' ist die Verwendung von NUL (0x00) in Datei- und Verzeichnisnamen ebenfalls eingeschränkt.
user117529
1
Die Unterscheidung zwischen reserviertem Zeichen (dh /und NUL) und reserviertem Namen (dh .und ..) könnte klarer gemacht werden. Es sei auch darauf hingewiesen, dass .der Name zu Beginn nur auf der Anwendungsebene und nicht in der Kernel- oder Systemaufruf-API eine besondere Bedeutung hat.
Kasperd
Ich denke, dein Platz ist verloren gegangen.
Nyuszika7h
1
..und . sind besonders: Sie können sie nicht bewegen oder entfernen. Sie sind jedoch keine Besonderheiten, wenn Sie Dateien auf sie verschieben.
Reinierpost
52

Sie können eine Datei nicht in .oder umbenennen, ..da alle Verzeichnisse bereits Einträge für diese beiden Namen enthalten. (Diese Einträge verweisen auf Verzeichnisse, und Sie können eine Datei nicht in ein Verzeichnis umbenennen.)

mv Erkennt den Fall, dass das Ziel ein vorhandenes Verzeichnis ist, und interpretiert es als Aufforderung, die Datei in dieses Verzeichnis zu verschieben (unter Verwendung des aktuellen Namens).

Backslashes haben damit nichts zu tun, da .es sich nicht um ein Shell-Metazeichen handelt. \.und .sind gleich zu bash.

cjm
quelle
9

Das Problem ist, dass Sie eine Datei in ein Verzeichnis verschieben. Dies darf scheitern.

Ich werde dir sagen, wie es einmal war.

mkdir hat dies im Wesentlichen gelesen (während ich dies in sh schreibe, wurde es wirklich in C und setuid-root geschrieben).

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

Sie sehen also, dass es nicht viel Besonderes gibt. und .. bis auf die Tatsache, dass sie von mkdir für Sie erstellt wurden und bereits existieren. Es gibt jetzt Code, der besagt, dass Sie sie nicht entfernen können, aber das war nicht immer der Fall.

Früher sah rmdir so aus:

rm -d $1/..
rm -d $1/.
rm -d $1
Joshua
quelle
+1 für die Geschichtsstunde und Hinzufügen von etwas, das nicht richtig abgedeckt ist.
Strg-Alt-Delor