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

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

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

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

現在のディレクトリを変更せずにこれを行う方法はありますか?親ディレクトリに変更すると、簡単にこれを実行できることがわかりますが、これが必要かどうか疑問に思います。結局のところ、別のシェルからディレクトリの名前を変更すると、後で元のシェルからファイルを作成できます。

答え1

はい、しかし、シンボルを使わずに名前でディレクトリを参照する必要があります.。相対パスを使用できます。これは.or以外のパスで終わります..

/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"動作します。

答え2

@Gillesの答えとして使用しますが、支柱の拡張簡単に説明すると、

mv ../{test,test2}

答え3

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

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

サブシェルを作成し、サブシェルの現在のディレクトリを変更しますが、デフォルトのシェルは元の場所に残ります。

関連情報