mv命令创建目录



我面临一个非常奇怪的问题。考虑一个例子,我有这些目录"/ten"one_answers"/1/2/3/4"我在这些目录中有一些文件。当我执行以下命令时

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

它将输出作为mv:无法将"/ten/"移动到"/1/2/3/4/5/6":没有这样的文件或目录。这看起来很好,因为它不创建目录。

但是如果我执行以下命令

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

目录5/6在/one/2中创建。即mv命令成功。

有人能解释一下这里发生了什么吗?为什么它不给出一个错误没有这样的文件或目录?

编辑:进一步观察。。

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

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

如果我遗漏了一些明显的内容,请告诉我。

要么正在执行另一个mv二进制文件,要么正在执行mv的另一个版本,要么正在将其封装为函数、脚本或别名。

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

type mv

你应该得到

mv is /bin/mv

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

type -a mv

更新

目录/1/2/3/4也存在目录/1/2/55存在。执行mv/1/2/3/4//one/2/5/6将达到目的在这里,目录六将被创建,即使它不是目前在我执行mv的情况下不会发生这种情况/一个/两个/三个/四个/一个/二个/五个/六,而"五"目录没有存在。在这种情况下,它会出错。

由于/one/two/five的存在,它只是将目录/one/two/three/four移动为/one/two/five/six。这意味着/one/two/five/six现在是以前为/one/two/three/four的目录的新名称或路径名。

通过参考mvman page和几个例子,可以帮助您理解所遇到的问题。从man 1 mv将SOURCE重命名为DEST,或将SOURCEs移动到DIRECTORY不明显的是SOURCEDEST,这就是你的困惑所在。例如:

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的新子目录。例如CCD_ 26。

如果/one/two/three/four/five存在(但不存在../six(,则mv /ten /one/two/three/four/five/six将导致/ten移动,并成为/one/two/three/four/fivesix新子目录。例如CCD_ 32。

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

最新更新