rsync多进程高并发传输脚本

#!/usr/bin/env bash

# Define source, target, maxdepth and cd to source

source="/tmp/tmp_data"

target="/tmp/tmp_data2"

depth=3

cd "${source}"

# Set the maximum number of concurrent rsync threads

maxthreads=5

# How long to wait before checking the number of rsync threads again

sleeptime=5

# Find all folders in the source directory within the maxdepth level

find . -maxdepth ${depth} -type d | while read dir

do

       # Make sure to ignore the parent folder

       if [ `echo "${dir}" | awk -F'/' '{print NF}'` -gt ${depth} ]

       then

           # Strip leading dot slash

           subfolder=$(echo "${dir}" | sed 's@^\./@@g')

           if [ ! -d "${target}/${subfolder}" ]

           then

               # Create destination folder

               mkdir -p "${target}/${subfolder}"

           fi

           # Make sure the number of rsync threads running is below the threshold

           while [ `ps -ef | grep -w [r]sync | awk '{print $NF}' | sort -nr | uniq | wc -l` -ge ${maxthreads} ]

           do

               echo "Sleeping ${sleeptime} seconds"

               sleep ${sleeptime}

           done

           # Run rsync in background for the current subfolder and move one to the next one

           nohup rsync -avP "${source}/${subfolder}/" "${target}/${subfolder}/" </dev/null >/dev/null 2>&1 &

       fi

done

# Find all files above the maxdepth level and rsync them as well

find . -maxdepth ${depth} -type f -print0 | rsync -avP --files-from=- --from0 ./ "${target}/"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值