Přejmenování aktuálního adresáře z prostředí – možné?

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *