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

シェル内(私の特定の場合は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 

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です