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

时间:2018-01-02 14:59:52

标签: bash rsync

我遇到的情况是我找不到解决办法。

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

谢谢!

2 个答案:

答案 0 :(得分: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如果我的问题得到解决,请告诉我。

答案 1 :(得分: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,这可能也不是你想要的。