Zmiana nazwy bieżącego katalogu z powłoki – możliwa?

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *