![寻找一种不锁定被复制文件的方法来复制文件](https://linux22.com/image/1396848/%E5%AF%BB%E6%89%BE%E4%B8%80%E7%A7%8D%E4%B8%8D%E9%94%81%E5%AE%9A%E8%A2%AB%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6%E7%9A%84%E6%96%B9%E6%B3%95%E6%9D%A5%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6.png)
我正在将来自不同来源的数据汇总在一起,这些来源位于一个由各种版本的 Windows (xp/7) 和一个 Linux (centos) 组成的混合环境中。数据可通过网络共享获取。数据由每个位置的不同软件生成,以不同的间隔创建和附加到文件。大多数数据源都是封闭系统,我没有管理权限,这确实使情况变得复杂。
我需要定期连接到网络共享并将数据收集到一个中心位置,用于进一步分发。数据会每周 7 天、每天 24 小时生成和收集,每次持续数周。这将从 Windows 2008 服务器计算机运行。
我在组织这项工作时遇到的唯一麻烦是从远程源复制文件而不锁定文件。我最初使用 robocopy 设置了一个运行良好的系统,直到我的测试发现,如果数据源软件试图附加到当前正在复制的文件中,它将失败。
不幸的是,使用 vss 不是一个选择,因为它们不是共享的卷。
因此,我正在寻找某种复制文件的方法,这种方法在复制过程中不会锁定文件。我通过检查复制前后的修改时间和大小来处理文件,并标记有差异的文件。没有最新的文件不是问题,但源头的数据丢失才是问题。
我研究过各种备份软件解决方案,但我测试过的所有软件在无法使用 vss 时仍然会锁定文件。
我不想为了一件非常简单的事情而必须实现自己的文件复制软件。
答案1
答案2
文件复制程序声称可以做到这一点,但它相当老旧(2004 年),所以我不知道它是否适合您。此外,不清楚在网络共享上使用时复制是否保持非阻塞。
当然,进行非阻塞复制非常危险,这就是为什么大多数实用程序不支持它的原因。如果主应用程序在您复制时更新文件,则您最终可能会得到损坏的副本。