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


24

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

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

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

回答:


41

はい。ただし、.表記法ではなく名前でディレクトリを参照する必要があります。相対パスを使用できます。それは、.または以外の何かで終わる必要があり..ます:

/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"機能します。


完璧...まさに私が望んでいた答え。
ネイサンオスマン

5
基本的な問題は、特別な「。」を削除したり名前を変更したりできないことです。および「..」名。
バーマー


1

そして、「現在のディレクトリの変更」をどのように定義するかに依存します。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.