从Shell重命名当前目录-可以吗?


24

是否可以从外壳中重命名当前工作目录(在我的特殊情况下为Bash)?如果我尝试以简单的方式执行此操作,则会导致错误:

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

还有另一种方法可以在不更改当前目录的情况下执行此操作吗?我意识到可以轻松地通过更改到父目录来完成此操作,但是我很好奇是否有必要。毕竟,如果我从另一个外壳程序重命名目录,那么以后仍然可以在原始外壳程序中创建文件。

Answers:


41

是的,但是您必须按名称而不是使用.符号来引用目录。您可以使用相对路径,它只能以.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"


完美...正是我所希望的答案。
内森·奥斯曼

5
基本的问题是,您不允许删除或重命名特殊的“”。和“ ..”名称。
Barmar 2015年


1

这取决于您如何定义“更改当前目录”。

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

生成一个子shell,并在该子shell中更改当前目录,但将主shell保留在原来的目录中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.