Niels2000 Asked: 2017-12-22 03:18:59 +0800 CST2017-12-22 03:18:59 +0800 CST 2017-12-22 03:18:59 +0800 CST 跨文件系统的近似原子移动? 772 我必须在 Ubuntu 下将一些文件从一个文件系统移动到另一个文件系统。但是,文件永远不会作为部分或不完整的文件存在于目的地,至少不在正确的文件名下,这一点非常重要。 到目前为止,我唯一的解决方案是编写一个脚本,获取每个文件,将其复制到目的地的临时名称,然后在目的地将其重命名(我认为应该是原子的)为原始文件名,最后删除原始文件. 但是,编写和调试脚本似乎对于这项任务来说是多余的。有没有一种方法或工具已经在本地做到这一点? file-copy move 1 个回答 Voted Best Answer cas 2017-12-22T03:56:27+08:002017-12-22T03:56:27+08:00 rsync复制到临时文件名(例如,请参阅Rsync 临时文件扩展名和rsync - 它是否在传输过程中创建临时文件?),除非您使用该--inplace选项。只有在文件成功传输后才会重命名它们。 rsync还会删除仅部分传输的任何目标文件(例如,由于磁盘已满或其他错误)。 还有一个--remove-source-files选项可以在源文件成功传输后删除它们。有关更多详细信息,请参见rsync手册页。 把所有这些放在一起,你可以使用类似的东西: rsync -ax --remove-source-files source/ target/ 此选项对于诸如将文件移出“传入”队列或类似于将要处理它们的目录的任务特别有用。 或者,如果这是一次性镜像,则可能只使用rsync不带该--remove-source-files选项的镜像。如果您愿意/需要,您可以稍后删除源文件。
rsync
复制到临时文件名(例如,请参阅Rsync 临时文件扩展名和rsync - 它是否在传输过程中创建临时文件?),除非您使用该--inplace
选项。只有在文件成功传输后才会重命名它们。rsync
还会删除仅部分传输的任何目标文件(例如,由于磁盘已满或其他错误)。还有一个
--remove-source-files
选项可以在源文件成功传输后删除它们。有关更多详细信息,请参见rsync
手册页。把所有这些放在一起,你可以使用类似的东西:
此选项对于诸如将文件移出“传入”队列或类似于将要处理它们的目录的任务特别有用。
或者,如果这是一次性镜像,则可能只使用
rsync
不带该--remove-source-files
选项的镜像。如果您愿意/需要,您可以稍后删除源文件。