Ich habe einen Softlink zum aktuellen Verzeichnis erstellt,
$ ln -s "$PWD" math
Ich wollte es dann in ein anderes Verzeichnis verschieben.
$ mv math/ ~/dirlinks/maths/
Dann wurde mir klar, dass ich
$ mv math ~/dirlinks/maths/
Daher breche ich den Vorgang mit Strg+C ab, bevor er abgeschlossen ist.
Ich habe festgestellt, dass sich ein Verzeichnis math
unter befindet ~/dirlinks/maths/
, und es scheint, dass die Dateien unter .
nach kopiert werden ~/dirlinks/maths/math
, da ich gesehen habe, dass die Dateien unter ~/dirlinks/maths/math
auch unter erscheinen .
. Aber ich verstehe das nicht, weil das mv
nicht der Fall ist cp
. Was ist passiert, als ich ausgeführt habe mv math/ ~/dirlinks/maths/
?
Danke.
Antwort1
Schauen wir uns an, was Ihr erster Befehl bewirkt hat: Er hat einen symbolischen Link math
in Ihrem aktuellen Verzeichnis erstellt, der auf den absoluten Pfad des aktuellen Verzeichnisses zeigt. Sehen wir uns das etwas genauer an:
user@host:/free$ ls -al /free
total 4
drwxrwxrwt 2 root root 40 Oct 14 10:29 .
drwxr-xr-x 24 root root 4096 Oct 1 22:28 ..
user@host:/free$ ln -vs /free math
‘math’ -> ‘/free’
user@host:/free$ ls -al /free
total 4
drwxrwxrwt 2 root root 60 Oct 14 10:29 .
drwxr-xr-x 24 root root 4096 Oct 1 22:28 ..
lrwxrwxrwx 1 user users 5 Oct 14 10:29 math -> /free
Wenn Sie nun einige Dateien hinzufügen $PWD
und den Verschiebevorgang durchführen:
user@host:/free$ touch a b
user@host:/free$ mv -vi math/ /tmp/Q
‘math/’ -> ‘/tmp/Q’
‘math/math’ -> ‘/tmp/Q/math’
‘math/b’ -> ‘/tmp/Q/b’
‘math/a’ -> ‘/tmp/Q/a’
removed ‘math/math’
removed ‘math/b’
removed ‘math/a’
mv: cannot remove ‘math/’: No such file or directory
Im Grunde verschiebt es das gesamte Verzeichnis, auf das verwiesen wird, math
zum Ziel. Da es auf das aktuelle Verzeichnis verweist, wird es vollständig dorthin verschoben, wo Sie es angegeben haben. Wenn Sie sich zufällig irgendwo direkt über dem Ziel befunden hätten, hätte dies zu einem interessanten Schleifenproblem führen können.