[英]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.txt和list_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.