Je možné přejmenovat aktuální pracovní adresář z prostředí shellu (v mém konkrétním případě Bash)? Pokud se o to pokusím přímo, skončím s chybou:
nathan@nathan-desktop:/tmp/test$ mv . test2 mv: cannot move ‘.’ to ‘test2’: Device or resource busy
Existuje jiný způsob, jak to provést beze změny aktuálního adresáře? Uvědomuji si, že toho můžu snadno dosáhnout změnou na nadřazený adresář, ale jsem zvědavý, jestli je to nutné. Koneckonců, když přejmenuji adresář z jiného prostředí, mohu i poté vytvářet soubory v původním prostředí.
Odpověď
Ano, ale musíte odkazovat na adresář jménem, ne pomocí .
notace. Můžete použít relativní cestu, musí končit pouze něčím jiným než .
nebo ..
:
/tmp/test$ mv ../test ../test2 /tmp/test$ pwd /tmp/test /tmp/test$ pwd -P /tmp/test2
Můžete použít absolutní cestu:
/tmp/test$ cd -P . /tmp/test2$ mv "$PWD" "${PWD%/*}/test3" /tmp/test2$
Podobně rmdir .
nikdy nebude fungovat, ale rmdir "$PWD"
ano.
Komentáře
- Perfektní … přesně v odpověď, v kterou jsem doufal.
- Základním problémem je, že vám ' není povoleno odstranit nebo přejmenovat speciální ". " a .. " jména.
Odpověď
Jako v odpovědi @Gilles, ale s použitím rozšíření složených závorek pro stručnost:
mv ../{test,test2}
odpověď
A záleží na tom, jak definujete „změnu aktuálního adresáře ”.
/tmp/test$ (cd .. && mv test test2) /tmp/test$ pwd /tmp/test /tmp/test$ pwd -P /tmp/test2
vytvoří subshell a změní aktuální adresář v subshell, ale ponechá primární shell tam, kde byl.