我面临一个非常奇怪的问题。 考虑一个例子,我有这些目录" / 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永远不会创建任何目录。
如果我错过了一些明显的东西,请告诉我。
答案 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
。