是否可以在 shell 中重命名当前工作目录(在我的特定情况下为 Bash)?如果我尝试以简单的方式执行此操作,则会出现错误:
nathan@nathan-desktop:/tmp/test$ mv . test2
mv: cannot move ‘.’ to ‘test2’: Device or resource busy
有没有另一种方法可以在不更改当前目录的情况下执行此操作?我意识到我可以通过更改到父目录轻松完成此操作,但我很好奇这是否有必要。毕竟,如果我从另一个 shell 重命名目录,之后我仍然可以在原始 shell 中创建文件。
答案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
生成一个子 shell 并更改子 shell 中的当前目录,但将主 shell 保留在原来的位置。