簡體   English   中英

rsync-將文件復制到另一台服務器

[英]rsync - copy files to another server

我的服務器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/ 

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)使用find列出所有文件

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

2)找到行數並將列表分成兩部分

wc -l /tmp/foo

387分割-l 200 / tmp / foo

mv xaa xaa.txt

然后像這樣rsync

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

我認為按文件大小分割要比對數字分割好(我假設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.txtlist_files_2.txt ,其中一半包含文件,具體取決於大小。

您可以使用rsync將此文件發送到每個服務器:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM