Zmiana nazwy bieżącego katalogu z powłoki - możliwe?


24

Czy można zmienić nazwę bieżącego katalogu roboczego z poziomu powłoki (w moim przypadku Bash)? Jeśli spróbuję to zrobić w prosty sposób, otrzymam błąd:

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

Czy istnieje inny sposób, aby to zrobić bez zmiany bieżącego katalogu? Zdaję sobie sprawę, że mogę to łatwo zrobić, przechodząc do katalogu nadrzędnego, ale jestem ciekawy, czy jest to konieczne. W końcu, jeśli zmienię nazwę katalogu z innej powłoki, nadal mogę tworzyć pliki w oryginalnej powłoce.

Odpowiedzi:


41

Tak, ale musisz odwoływać się do katalogu według nazwy, a nie przy użyciu .notacji. Możesz użyć ścieżki względnej, musi ona kończyć się na czymś innym niż .lub ..:

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

Możesz użyć ścieżki bezwzględnej:

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

Podobnie, rmdir .nigdy nie zadziała, ale rmdir "$PWD"działa.


Idealnie ... dokładnie taka odpowiedź, na którą liczyłem.
Nathan Osman,

5
Podstawowym problemem jest to, że nie można usuwać ani zmieniać nazwy specjalnego „.” i nazwy „..”.
Barmar


1

I zależy to od tego, jak zdefiniujesz „zmianę bieżącego katalogu”.

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

spawnuje podpowłokę i zmienia bieżący katalog w podpowłoce, ale pozostawia podstawową powłokę tam, gdzie była.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.