如何使用scp将源服务器文件均分至三台目标服务器?
如何使用scp将源服务器文件均分至三台目标服务器?
嗨,我完全懂你的需求——就是要把Server-A上/opt/Test目录里的文件,按非连续的方式均匀拆分到Server-B、Server-C、Server-D三台服务器,就像你举的例子那样:file0、3、6、9去B,1、4、7去C,剩下的去D对吧?
这里有个实用的bash脚本可以实现这个需求,核心思路是根据文件名里的数字后缀做模3运算,以此决定文件的目标服务器,刚好能完美匹配你要的分配逻辑:
首先在Server-A的终端里创建一个脚本文件(比如命名为split_copy.sh),把下面的内容粘贴进去:
#!/bin/bash # 源目录路径,替换成你的实际路径 SOURCE_DIR="/opt/Test" # 目标服务器的地址和接收目录,替换成你的实际信息 DEST_B="你的用户名@Server-B:/目标目录路径" DEST_C="你的用户名@Server-C:/目标目录路径" DEST_D="你的用户名@Server-D:/目标目录路径" # 遍历源目录下的file开头的文件 for file in "$SOURCE_DIR"/file*; do # 提取纯文件名(去掉路径前缀) filename=$(basename "$file") # 从文件名里剥离出数字部分(假设文件名是fileX格式) file_num=${filename#file} # 根据数字模3的结果分配目标服务器 case $((file_num % 3)) in 0) scp "$file" "$DEST_B" ;; 1) scp "$file" "$DEST_C" ;; 2) scp "$file" "$DEST_D" ;; esac done
给脚本添加执行权限:
chmod +x split_copy.sh
一些重要提示:
- 请把脚本里的
你的用户名和/目标目录路径替换成三台目标服务器的实际信息,比如Server-B的接收目录如果是/opt/Test_Files,就写成yourname@Server-B:/opt/Test_Files。 - 强烈建议先配置Server-A到三台目标服务器的SSH免密登录,这样脚本运行时不用反复输入密码,效率会高很多。配置方法很简单:在Server-A上用
ssh-keygen生成密钥对,再把公钥复制到每台目标服务器的~/.ssh/authorized_keys文件里就行。 - 如果你的文件名不是
fileX这种格式,也可以调整逻辑——比如按文件的inode编号模3,或者按文件创建时间排序后分配,你要是有具体的命名规则,我可以帮你修改脚本适配。
最后直接在Server-A上运行脚本就可以了:
./split_copy.sh
这样就能按照你想要的方式,把文件均匀分配到三台服务器啦!
备注:内容来源于stack exchange,提问作者sunman
相关产品推荐
相关产品推荐

