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

如何用SSH和Cat编写Shell脚本跨Linux服务器合并文件?

跨服务器合并同目录对应文件的Shell脚本实现

完全可以用SSH和Cat编写Shell脚本实现这个需求,前提是你已经在server1上配置好到server2、server3的免密SSH登录(避免脚本执行时手动输入密码)。

实现思路

  1. 定义需要同步的服务器列表和目标目录
  2. 遍历server1上folder1目录下的所有普通文件
  3. 对每个文件,通过SSH远程读取server2、server3上同路径的文件内容,追加到server1的对应文件中
  4. 可选:先备份server1的原文件,避免合并出错后无法恢复

示例脚本

#!/bin/bash

# 配置参数
LOCAL_DIR="/path/to/folder1"
REMOTE_SERVERS=("server2" "server3")
REMOTE_DIR="/path/to/folder1"

# 备份本地原文件(建议开启,防止合并出错)
BACKUP_DIR="${LOCAL_DIR}/backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p "${BACKUP_DIR}"
cp "${LOCAL_DIR}"/* "${BACKUP_DIR}"

# 遍历本地目录下的所有文件
for FILE in "${LOCAL_DIR}"/*; do
    # 只处理普通文件,跳过目录
    if [ -f "${FILE}" ]; then
        FILENAME=$(basename "${FILE}")
        echo "正在合并文件: ${FILENAME}"
        
        # 遍历远程服务器,追加内容到本地文件
        for SERVER in "${REMOTE_SERVERS[@]}"; do
            # 检查远程服务器是否存在该文件,存在则追加
            if ssh "${SERVER}" "[ -f ${REMOTE_DIR}/${FILENAME} ]"; then
                ssh "${SERVER}" "cat ${REMOTE_DIR}/${FILENAME}" >> "${FILE}"
                echo "  已从${SERVER}追加内容"
            else
                echo "  ${SERVER}上不存在${FILENAME},跳过"
            fi
        done
    fi
done

echo "所有文件合并完成,原文件备份在${BACKUP_DIR}"

使用说明

  1. 将脚本中的/path/to/folder1替换为实际的目录路径
  2. 确保server1能免密登录server2和server3(可通过ssh-keygen生成密钥,ssh-copy-id server2推送公钥)
  3. 给脚本添加执行权限:chmod +x merge_files.sh
  4. 在server1上执行脚本:./merge_files.sh

注意事项

  • 如果远程服务器的SSH端口不是默认22,需要在SSH命令中指定端口,例如:ssh -p 2222 "${SERVER}" "xxx"
  • 若文件数量多或体积大,可考虑压缩传输后解压追加来优化效率,普通场景下cat+SSH足够用
  • 合并前确认远程文件与本地文件编码一致,避免乱码问题

内容的提问来源于stack exchange,提问作者Perichappan Lakshmanan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:10:46