mv无法将目录移动到具有同名目录的目标:
$ mv fortran/ imperative_PLs/
mv: cannot move ‘fortran/’ to ‘imperative_PLs/fortran’: Directory not emptymv在这种情况下不起作用?这可以通过系统调用mv来解释吗?(与rsync中的can相比)mv被设计成在这种情况下不能工作?理由或要点是什么?发布于 2016-03-25 21:35:32
mv不能工作,因为它没有被设计为这样做。系统调用(可能)为之一。rename (最初是link和unlink)unlinkmv要采用哪些操作路径:如果合并/替换操作是您想要的,那么您可以使用cp和rm,或者通过使用文件树复制实用程序tar、pax等来实现它。
发布于 2016-03-25 21:35:50
mv和rsync不是类似的程序。特别是,mv经常试图简单地重命名对象。如果它位于同一个文件系统中,则根本不复制内容。
如果您还没有imperative_PLs/fortran,那么mv将接受现有的fortran目录并将其重命名到树中的那个位置。
但是在那个位置已经有了一个目录(包含内容)。因为名称只能引用单个对象,所以必须删除或重命名现有目录。mv假设您不想这样做并中止操作。
相反,rsync会复制fortran中的各个文件和其他内容,并将它们放到现有的imperative_PLs/fortran目录中。
把它想象成rename,这样的行为可能会更容易理解。
发布于 2016-03-25 21:39:44
mv实际上是封面下的rename。
如果将一个文件移动到另一个文件,则mv假定您知道正在做什么并覆盖目标文件。
如果将一个目录移动到另一个目录,mv假设您希望保留原始目录的basename,并在目标目录上创建它。如果目标端还没有具有该名称的目录,或者如果具有该名称的目录存在但为空,则操作将成功。
但是,如果目标目录已经存在且不为空,则这不再是一个rename,而是一个递归文件和目录删除。rename并不是为了做它而设计的,所以它失败了,mv没有更进一步,因为它假设您不想这样做,而且也失败了。
https://unix.stackexchange.com/questions/272197
复制相似问题