我的服务器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/
答案 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/