Czy można zmienić nazwę bieżącego katalogu roboczego z poziomu powłoki (w moim przypadku Bash)? Jeśli spróbuję zrobić to w prosty sposób, otrzymam błąd:
nathan@nathan-desktop:/tmp/test$ mv . test2 mv: cannot move ‘.’ to ‘test2’: Device or resource busy
Czy jest inny sposób na zrobienie tego bez zmiany bieżącego katalogu? Zdaję sobie sprawę, że mogę to łatwo osiągnąć, 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 będę mógł później tworzyć pliki w oryginalnej powłoce.
Odpowiedź
Tak, ale musisz odwoływać się do katalogu po nazwie, a nie przy użyciu .
. Możesz użyć ścieżki względnej, po prostu musi kończyć się 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 działało, ale rmdir "$PWD"
działa.
Komentarze
- Idealnie… dokładnie taka odpowiedź, na jaką liczyłem.
- Podstawową kwestią jest to, że ' nie możesz usunąć specjalnego ". " i .. " imiona.
Odpowiedź
Jak w @Gilles answer, ale używając rozwinięcia nawiasów klamrowych dla zwięzłości:
mv ../{test,test2}
Odpowiedź
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
tworzy podpowłokę i zmienia bieżący katalog w podpowłoce, ale pozostawia powłokę podstawową tam, gdzie była.