web-dev-qa-db-ja.com

シェルから現在のディレクトリの名前を変更する-可能ですか?

シェル(私の場合はBash)内から現在の作業ディレクトリの名前を変更することはできますか?これを簡単な方法で実行しようとすると、エラーが発生します。

nathan@nathan-desktop:/tmp/test$ mv . test2
mv: cannot move ‘.’ to ‘test2’: Device or resource busy

現在のディレクトリを変更せずにこれを行う別の方法はありますか?親ディレクトリに変更することで簡単にこれを達成できることを理解していますが、これが必要かどうか知りたいです。結局のところ、別のシェルからディレクトリの名前を変更した場合でも、後で元のシェルにファイルを作成できます。

26
Nathan Osman

はい。ただし、.表記ではなく、名前でディレクトリを参照する必要があります。相対パスを使用できますが、末尾が.または..以外である必要があります。

/tmp/test$ mv ../test ../test2
/tmp/test$ pwd
/tmp/test
/tmp/test$ pwd -P
/tmp/test2

絶対パスを使用できます。

/tmp/test$ cd -P .
/tmp/test2$ mv "$PWD" "${PWD%/*}/test3"
/tmp/test2$ 

同様に、rmdir .は機能しませんが、rmdir "$PWD"は機能します。

@Gillesでの回答と同様ですが、簡潔にするために ブレース展開 を使用します。

mv ../{test,test2}
2
robstarbuck

また、「現在のディレクトリの変更」の定義方法によって異なります。

/tmp/test$ (cd .. && mv test test2)
/tmp/test$ pwd
/tmp/test
/tmp/test$ pwd -P
/tmp/test2

サブシェルを生成し、サブシェルの現在のディレクトリを変更しますが、プライマリシェルは元の場所に残します。