为什么`mv file /dir` 不将文件移动到当前工作目录的子目录?

whi*_*ing 10 command-line paths directory mv

我在我的/etc目录中并输入了命令

me@mylaptop:/etc$ sudo mv MyFile.conf /openvpn
Run Code Online (Sandbox Code Playgroud)

我认为这会将文件移动到目录openvpn的子目录中/etc。然而,事情似乎并非如此。我所能确认的是命令已执行。

des*_*ert 51

如果具有此名称的目录不存在,则将该文件重命名为openvpn位于根目录中/。要恢复它,请运行:

sudo mv /openvpn /etc/MyFile.conf
Run Code Online (Sandbox Code Playgroud)

如果目录确实存在,您将文件移动到其中,则还原为:

sudo mv /openvpn/MyFile.conf /etc/
Run Code Online (Sandbox Code Playgroud)

要将其移动到当前目录的现有子目录,您可以运行以下任何一个——这些使用相对路径:

mv MyFile.conf openvpn
mv MyFile.conf openvpn/
mv MyFile.conf ./openvpn
mv MyFile.conf ./openvpn/
Run Code Online (Sandbox Code Playgroud)

.是指向当前目录的链接,所以./路径开头的意思是“在这个目录中”。末尾的斜杠表示这openvpn是一个目录,您希望将文件移动到其中。如果您不提供它,如果存在具有此名称的目录,则文件将移入其中,否则文件将重命名openvpn. 有了/底,mv会警告你,如果该目录丢失,重命名,所以这是,如果你不希望重命名的安全途径。

/另一方面,如果您的路径以绝对路径开头,而不管当前工作目录如何,则它始终相对于根目录/。对文件和目标使用绝对路径,您的命令将如下所示:

mv /etc/MyFile.conf /etc/openvpn
mv /etc/MyFile.conf /etc/openvpn/
Run Code Online (Sandbox Code Playgroud)

进一步阅读

  • 如果您不知道该目录是否存在,请先尝试 `sudo mv /openvpn/MyFile.conf /etc/` 命令。在可能的情况下,该目录不存在,它只会给您一个错误(可能是“不是目录”)并且不会触及文件系统。然后,您可以执行`sudo mv /openvpn /etc/MyFile.conf`。 (2认同)

pom*_*sky 9

你需要使用

me@mylaptop:/etc$ sudo mv MyFile.conf openvpn/
Run Code Online (Sandbox Code Playgroud)

在移动MyFile.conf文件到openvpn的子目录/etc/

另一方面

me@mylaptop:/etc$ sudo mv MyFile.conf /openvpn
Run Code Online (Sandbox Code Playgroud)

会将文件移动到/目录 as openvpn(即重命名为openvpn)(假设/openvpn目录不存在)。

  • 此外,第一个命令末尾的斜杠是可选的。但我想这是一个好习惯,因为如果它不是目录,它会使命令失败,而不是像 OP 描述的那样创建一个令人困惑的情况(或者更糟的是,覆盖一个重要的文件。) (3认同)