You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:43:01