从 shell 重命名当前目录 - 可能吗?

从 shell 重命名当前目录 - 可能吗?

是否可以在 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 保留在原来的位置。

相关内容