rsync - 如何复制一定数量的文件,暂停,重复

问题描述 投票:0回答:2

我有一种情况,我没有找到解决方案。

我有一个过程,可以生成〜10,000 xml文件到一个目录。这些文件在每5分钟运行一个进程的服务器上进行rsync(一次复制后删除)。问题是文件的数量是这样的,处理它们需要超过5分钟,我无法改变这个时间。我想做的是想出一个脚本,它允许我rsync目录中的前2500个文件,等待5分钟,rsync下一个2500,等等。文件的数量各不相同,所以我希望它继续进行,直到所有文件都被复制完毕。文件的顺序无关紧要,可以按字母或按日期或随机列出。有没有人有任何如何做到这一点的例子?

谢谢!

bash rsync
2个回答
1
投票

如果我理解你的问题,你需要这样的东西:

while true; do
    ls | shuf -n 2500 > /tmp/sync_files # pick random files
    rsync -av `cat /tmp/sync_files` /destination/  # sync the files
    xargs rm < /tmp/sync_files # delete the files
    sleep 300; # sleep 5 minutes
done

在代码中你选择随机文件,在另一个目录中同步,然后删除它们(如果文件包含空格或一些奇怪的字符,它应该用for循环然后rm命令,最后睡5秒。让我知道如果我你的问题是对的。


0
投票

随机性是可选的,我们希望在传输文件时停止。使用ls的输出有时会产生奇怪的结果所以这将使它成为:

#!/bin/bash
qty=2500
sleeptime=300

typeset -i i
i=0

for f in * ; do
    rsync -av "$f" /destination/
    rm $f
    i=$i+1
    if [ $i = $qty ] ; then
        sleep $sleeptime
        i=0
    fi
done

但是你会为每个文件做一个rsync,这可能也不是你想要的。

© www.soinside.com 2019 - 2024. All rights reserved.