背景
我正在使用 rsync 从 Web 服务器下载一大堆大文件到我的本地计算机(在本地计算机上运行 rsync)。
在 Web 服务器端,重要的是下载后删除这些文件,以向服务器表明它们已下载。
设想
使用命令:
rsync -e ssh -r --bwlimit=32 --remove-source-files --update --partial-dir /home/me/.rsync-partial remote_host:/home/me/folder-of-big-files /home/me/local-store-for-big-files
对于文件不多的测试,它工作得很好,正如预期的那样。
我下载了文件,并从远程服务器中删除了它们,一切正常。
不过,当我进行全面下载时,我注意到尽管服务器上有文件可供我本地使用,但它们并没有从服务器上删除。
我认为这是因为 rsynclists all files, then downloads all files, then deletes all files
而不是lists all files, then downloads a file, then deletes that file, then repeats till the list is empty
问题
由于我是澳大利亚人,所以我必须限制下载速度,以免耗尽数据。
这意味着到达处理部分所需的时间delete files
总是比到达舞台所需的时间长something went wrong and rsync didn't complete
。
这意味着,无论文件是成功下载的文件不会从服务器中删除。
但是,由于它们已经下载,我的理解是,下次执行 rsync 时它们也不会从远程服务器中删除。
询问
有没有更好的方法可以在文件下载后尽快删除它们?
我正在考虑列出目录,并仅在文件的子目录中单独进行 rsync,但我愿意接受更好的替代方案。
干杯。
答案1
我认为这是因为 rsync
lists all files, then downloads all files, then deletes all files
这正是手册页说(我强调)
--删除源文件
这告诉 rsync 从发送方删除文件(即非目录)属于转移的一部分并已在接收端成功复制。
因此文件仅在以下情况下被删除全部文件属于转移的一部分已成功转移。即使转移了 99%,也不会删除它们,直到转移完最后的 1%。
我正在考虑列出目录,并仅在文件的子目录中单独进行 rsyncing
你可以这样做,当每个人同步完成后,它将删除源上的文件。不过,您需要考虑您正在下载的文件组是否是连贯整体的一部分。你说
在网络服务器端,重要的是这些文件一旦下载就必须被删除,以向服务器表明它们已被下载。
如果你的新下载脚本仅成功下载并删除了一半文件,会发生什么情况?网络服务器是否会覆盖一切所以你遗漏了一些文件?还是说它只会在删除文件时替换每个单独的文件,并不断将数据附加到现有文件,直到文件被删除?
在你的情况下这可能无关紧要,但你通常希望文件组处于一致状态,因此值得考虑。你不想下载并删除“今日订单”文件是否意味着服务器将覆盖“今日送货地址”而你却没有……