mv命令创建目录

时间:2014-07-27 12:41:12

标签: linux bash mv

我面临一个非常奇怪的问题。 考虑一个例子,我有这些目录" / ten"和" /一/二/三/四"我在这些目录中有几个文件。 当我执行以下命令时

mv /ten/ /one/two/three/four/five/six

它将输出作为 mv:不能移动' / ten /'至/ /一/二/三/四/五/六' : 没有相应的文件和目录。这看起来不错,因为它没有创建目录。

但是如果我执行以下命令

mv /one/two/three/four/ /one/two/five/six

目录五/六在/一/二内创建。即mv命令成功。

有谁能请解释这里发生的事情?为什么它没有给出错误没有这样的文件或目录?

编辑:进一步观察..

目录/一/二/三/四存在目录/一/二/五存在。 执行mv /one/two/three/four/ /one/two/five/six将成功。即使目录六不存在,也会创建目录六 在我执行mv /one/two/three/four /one/two/five/six和"五"的情况下,这种情况不会发生。目录不存在。在这种情况下,它会给出错误。

我认为mv永远不会创建任何目录。

如果我错过了一些明显的东西,请告诉我。

2 个答案:

答案 0 :(得分:2)

您要么执行另一个mv二进制文件,执行另一个版本的mv,要么就像函数,脚本或别名一样包装它。

要知道您是否真的在运行真正的mv,请运行

type mv

你应该

mv is /bin/mv

根据Etan Reisner的建议,您还可以添加-a以获取更多信息:

type -a mv

更新

  

目录/一/二/三/四也存在目录/一/二/五   存在。执行mv / one / two / three / four / / one / two / five / six会   成功。这里将创建目录六,即使它不是   当下。在执行mv的情况下,这不会发生   /一/二/三/四/一/二/五/六和"五"目录没有   存在。在这种情况下,它会给出错误。

由于存在/one/two/five,因此只需将您的目录/one/two/three/four移至/one/two/five/six即可。这意味着/one/two/five/six现在是以前/one/two/three/four目录的新名称或路径名。

答案 1 :(得分:1)

参考man page mv以及一些示例,可以帮助理解您所掌握的问题。从man 1 mv 将资源重命名为DEST,或将资源转移到DIRECTORY。不明显的是SOURCE是什么,DEST是什么,这是你的混乱出现的地方。例如:

mv /ten/ /one/two/three/four/five/six
it gives the output as mv: cannot move '/ten/' to '/one/two/three/four/five/six' : 
No such file or directory. Which looks fine as it doesn't create directories. 

它没有。在您的示例中,SOURCE/ten,您的DEST取决于/one/two/three/four/five是否存在以及/one/two/three/four/five/six是否存在。

如果/one/two/three/four/five存在,那么mv /ten /one/two/three/four/five将导致/ten移动并成为/one/two/three/four/five的新子目录。例如/one/two/three/four/five/ten

如果/one/two/three/four/five存在(但不是../six),那么mv /ten /one/two/three/four/five/six将导致/ten移动并成为six /one/two/three/four/five的新子目录。例如/one/two/three/four/five/six

如果/one/two/three/four/five不存在,那么mv将失败,因为您没有提供有效的DEST