如何用Shell脚本将一台Linux服务器的filea.txt内容写入另一台的fileb.txt
解决方案
核心思路是通过SSH管道传输文件内容到目标服务器执行追加操作,根据源文件存放位置不同可以选择对应方案:
方案1:源文件filea.txt存放在本地执行脚本的服务器
直接执行以下命令即可实现本地内容追加到远程服务器的fileb.txt:
cat /path/to/local/filea.txt | ssh 远程用户名@远程服务器IP "cat >> /path/to/remote/fileb.txt"
方案2:源文件filea.txt存放在其他源服务器
找一台可以同时连通源服务器和目标服务器的机器执行以下命令,实现跨服务器内容追加:
ssh 源服务器用户名@源服务器IP "cat /path/to/source/filea.txt" | ssh 目标服务器用户名@目标服务器IP "cat >> /path/to/target/fileb.txt"
可选优化方案(适合大文件)
如果文件体积较大,推荐用rsync的追加模式,支持断点续传,传输效率更高:
rsync --append /path/to/local/filea.txt 远程用户名@远程服务器IP:/path/to/remote/fileb.txt
注意事项
- 提前配置SSH免密登录,避免脚本执行时卡住等待密码输入:本地执行
ssh-keygen生成密钥后,用ssh-copy-id 远程用户名@远程服务器IP把公钥推送到目标服务器即可 - 所有文件路径建议写绝对路径,避免SSH登录默认工作目录和预期不一致导致的文件找不到、写错位问题
- 管道传输方式天然规避了文件内容包含特殊Shell字符的问题,内容通过标准输入流传递,不会被目标端Shell解析转义
可直接使用的脚本示例
#!/bin/bash # 自定义配置项 SOURCE_FILE="/data/filea.txt" REMOTE_USER="root" REMOTE_HOST="192.168.1.100" REMOTE_TARGET_FILE="/data/fileb.txt" # 源文件存在性校验 if [ ! -f "${SOURCE_FILE}" ]; then echo "ERROR: 源文件${SOURCE_FILE}不存在" exit 1 fi # 远程服务器连通性校验 ssh -q -o ConnectTimeout=5 "${REMOTE_USER}@${REMOTE_HOST}" exit if [ $? -ne 0 ]; then echo "ERROR: 无法连接到远程服务器${REMOTE_HOST}" exit 1 fi # 执行内容追加 cat "${SOURCE_FILE}" | ssh "${REMOTE_USER}@${REMOTE_HOST}" "cat >> ${REMOTE_TARGET_FILE}" # 执行结果判断 if [ $? -eq 0 ]; then echo "SUCCESS: 内容已成功追加到远程文件" else echo "ERROR: 内容追加失败" exit 1 fi
内容的提问来源于stack exchange,提问作者Lagquary
相关产品推荐
相关产品推荐

