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.

Nathan Osman
źródło

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.

Gilles „SO- przestań być zły”
źródło
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
2

Jak w @Gilles, ale zwięzłe użycie nawiasów klamrowych :

mv ../{test,test2}
robstarbuck
źródło
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.

G-Man mówi „Przywróć Monikę”
źródło