rsync - 将文件复制到另一台服务器

时间:2016-02-01 13:05:28

标签: linux ssh rsync

我的服务器1中有超过500个Mp4文件 所以我希望他们中的一半发送到服务器2,其中一半发送到服务器3

但我不知道怎么做这个

有没有办法按字母或日期或其他方式选择文件 以

开头的示例视频
 a,c,e*.mp4  

将发送到服务器2和以

开头的视频
 b,d,f*.mp4 

将发送到服务器3

或者你认为其他任何方式更好

rsync -avzP /home/user/public_html/domain.com/ ip:/home/user2/public_html/domain.com/ 

3 个答案:

答案 0 :(得分:1)

1)使用find制作所有文件的列表

find /opt/mymp3folder -print > /tmp/foo

2)找到行数并将列表拆分为两个

cd /tmp
wc -l /tmp/foo
387
split -l 200 /tmp/foo

3)默认情况下拆分会生成一组名为xaa xab xac等的文件。因此,请使用xaa复制到一台服务器,然后使用xab复制到另一台服务器

rsync -av --files-from=/tmp/xaa . server1:/opt/newmp3folder/
rsync -av --files-from=/tmp/xab . server2:/opt/newmp3folder/

''在上面是“源”路径并允许在“files-from”中使用相对路径。您需要与find命令的运行路径相同并使用。或者将其设置为绝对值

显然,如果您想定期执行此操作,可能需要正确编写脚本

答案 1 :(得分:1)

1)使用find制作所有文件的列表

find /opt/mymp3folder -print > /tmp/foo

2)找到行数并将列表拆分为两个

wc -l /tmp/foo

387     split -l 200 / tmp / foo

mv xaa xaa.txt

然后像这样的rsync

 rsync -avzP -e ssh `cat xaa.txt` root@0.0.0.0:/var/www/

答案 2 :(得分:1)

我认为最好按大小拆分文件而不是数字(我假设你的mp4中有几个文件大小)。

#!/bin/bash
FOLDER=$1
TMP_FILE=$(mktemp)

find  $FOLDER -type f -exec stat -c "%s;%n" {} \; | sort -t ';' -k 2 | awk 'BEGIN{ sum=0; FS=";"} { sum += $1; print sum";"$1";"$2 }' > $TMP_FILE
TOTAL_SIZE=$(tail -n 1 $TMP_FILE | cut -f 1 -d ';')
HALF_SIZE=$(echo $TOTAL_SIZE / 2 | bc)
echo $TOTAL_SIZE $HALF_SIZE


# split part
IFS=';'
while read A B C ; do
    [ $A -lt $HALF_SIZE ] && echo "$C" >> lst_files_1.txt || echo "$C" >> lst_files_2.txt
done  < $TMP_FILE
rsync -avzP 
rm $TMP_FILE

执行后,您有 list_files_1.txt list_files_2.txt ,其中包含一半的文件,具体取决于尺寸。

您可以使用rsync将此文件发送到每个服务器:

rsync -avzP $(cat list_files_1.txt) ip:/home/user2/public_html/domain.com/