Umbenennen des aktuellen Verzeichnisses aus einer Shell - möglich?

24

Ist es möglich, das aktuelle Arbeitsverzeichnis in einer Shell umzubenennen (in meinem speziellen Fall Bash)? Wenn ich dies auf einfache Weise versuche, erhalte ich einen Fehler:

nathan@nathan-desktop:/tmp/test$ mv . test2
mv: cannot move ‘.’ to ‘test2’: Device or resource busy

Gibt es eine andere Möglichkeit, ohne das aktuelle Verzeichnis zu ändern? Mir ist klar, dass ich dies leicht erreichen kann, indem ich in das übergeordnete Verzeichnis wechsle, aber ich bin gespannt, ob dies notwendig ist. Wenn ich das Verzeichnis von einer anderen Shell aus umbenenne, kann ich anschließend immer noch Dateien in der ursprünglichen Shell erstellen.

Nathan Osman
quelle

Antworten:

41

Ja, aber Sie müssen auf das Verzeichnis mit dem Namen verweisen, nicht mit der .Notation. Sie können einen relativen Pfad verwenden, der nur mit etwas anderem als .oder enden muss ..:

/tmp/test$ mv ../test ../test2
/tmp/test$ pwd
/tmp/test
/tmp/test$ pwd -P
/tmp/test2

Sie können einen absoluten Pfad verwenden:

/tmp/test$ cd -P .
/tmp/test2$ mv "$PWD" "${PWD%/*}/test3"
/tmp/test2$ 

Ebenso rmdir .wird es nie funktionieren, aber es rmdir "$PWD"funktioniert.

Gilles 'SO - hör auf böse zu sein'
quelle
Perfekt ... genau die Antwort, auf die ich gehofft hatte.
Nathan Osman
5
Das Grundproblem besteht darin, dass Sie das Sonderzeichen "." Nicht entfernen oder umbenennen dürfen. und ".." Namen.
Barmar
2

Wie in @Gilles Antwort , aber mit Klammer Erweiterung der Kürze:

mv ../{test,test2}
Robstarbuck
quelle
1

Und es hängt davon ab, wie Sie "Ändern des aktuellen Verzeichnisses" definieren.

/tmp/test$ (cd .. && mv test test2)
/tmp/test$ pwd
/tmp/test
/tmp/test$ pwd -P
/tmp/test2

Erzeugt eine Subshell und ändert das aktuelle Verzeichnis in der Subshell, belässt aber die primäre Shell dort, wo sie war.

G-Man sagt, "Monica wiedereinsetzen"
quelle