シェル(私の場合はBash)内から現在の作業ディレクトリの名前を変更することはできますか?これを簡単な方法で実行しようとすると、エラーが発生します。
nathan@nathan-desktop:/tmp/test$ mv . test2
mv: cannot move ‘.’ to ‘test2’: Device or resource busy
現在のディレクトリを変更せずにこれを行う別の方法はありますか?親ディレクトリに変更することで簡単にこれを達成できることを理解していますが、これが必要かどうか知りたいです。結局のところ、別のシェルからディレクトリの名前を変更した場合でも、後で元のシェルにファイルを作成できます。
はい。ただし、.
表記ではなく、名前でディレクトリを参照する必要があります。相対パスを使用できますが、末尾が.
または..
以外である必要があります。
/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}
また、「現在のディレクトリの変更」の定義方法によって異なります。
/tmp/test$ (cd .. && mv test test2)
/tmp/test$ pwd
/tmp/test
/tmp/test$ pwd -P
/tmp/test2
サブシェルを生成し、サブシェルの現在のディレクトリを変更しますが、プライマリシェルは元の場所に残します。