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

如何编写Shell脚本读取文件并自动执行SCP文件复制任务

完善后的Shell脚本实现方案

假设你的输入文本文件(比如paths.txt)每行格式为目标路径 源路径,示例内容如下:

/shared36/docs/report1 /ftpvolume/uploads/202405
/shared36/docs/report2 /ftpvolume/uploads/202406

以下是完善后的脚本,包含完整的scp执行逻辑与基础错误处理:

#!/bin/bash

# 检查是否传入了路径文件参数
if [ $# -ne 1 ]; then
    echo "使用方法: $0 <路径文件路径>"
    exit 1
fi

PATH_FILE="$1"

# 检查路径文件是否存在
if [ ! -f "$PATH_FILE" ]; then
    echo "错误: 文件 $PATH_FILE 不存在"
    exit 1
fi

# 逐行读取文件内容
while read -r target_path source_path; do
    # 验证路径格式是否符合要求
    if [[ ! "$target_path" =~ ^/shared36 ]]; then
        echo "警告: 目标路径 $target_path 不符合格式要求,跳过该行"
        continue
    fi
    if [[ ! "$source_path" =~ ^/ftpvolume ]]; then
        echo "警告: 源路径 $source_path 不符合格式要求,跳过该行"
        continue
    fi

    source_file="${source_path}/ABC.PDF"
    # 检查源文件是否存在
    if [ ! -f "$source_file" ]; then
        echo "错误: 源文件 $source_file 不存在,跳过该行"
        continue
    fi

    # 创建目标目录(如果不存在)
    mkdir -p "$target_path"

    # 执行scp命令复制文件
    echo "正在复制 $source_file 到 $target_path..."
    if scp "$source_file" "$target_path/"; then
        echo "复制成功: $source_file -> $target_path"
    else
        echo "复制失败: $source_file -> $target_path"
    fi
done < "$PATH_FILE"

echo "所有任务执行完毕"

关键功能说明

  • 参数校验:脚本启动时检查是否传入了正确的路径文件参数,避免无意义执行
  • 格式验证:确保每行的目标路径以/shared36开头、源路径以/ftpvolume开头,不符合则跳过
  • 文件存在性检查:复制前先确认源文件ABC.PDF是否存在,避免无效scp调用
  • 目标目录创建:自动创建不存在的目标路径,防止因目录缺失导致复制失败
  • 执行反馈:每个复制任务都会输出明确的成功/失败提示,方便排查问题

使用注意事项

  1. 确保输入文件每行仅包含两个路径,用空格分隔,不要有多余空格或换行
  2. 如果目标路径是远程服务器路径(比如user@host:/shared36/...),需确保当前用户已配置免密登录,避免每次输入密码
  3. 若需要调试scp过程,可以在scp命令后添加-v参数(即scp -v "$source_file" "$target_path/")查看详细日志
  4. 脚本需要有读取源文件、写入目标路径的权限,可根据需求添加sudo(谨慎使用)

内容的提问来源于stack exchange,提问作者abdul arshad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:41:18