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

如何在shell脚本中向函数传递正则匹配多文件参数并逐个复制

Shell函数接收通配符匹配文件并逐个复制的实现方案

你调用copyFiles sourcePathFiles/filename.*时,通配符*会在函数执行前被Shell自动展开为所有匹配到的文件路径,作为独立参数传入函数,不需要额外在函数内做正则解析,只需修正原有代码的问题即可实现需求。

修正后的完整代码

copyFiles() {
    # 提前判断目标目录是否存在,不存在则自动创建
    if [ ! -d "$TARGET_DIR" ]; then
        mkdir -p "$TARGET_DIR"
    fi
    # 遍历所有已展开的文件参数
    for file in "$@"
    do
        # 校验文件存在性,避免通配符无匹配时的异常
        if [ -f "$file" ]; then
            echo "File: $file"
            cp -f "$file" "$TARGET_DIR"
        else
            echo "Warning: 跳过不存在的文件 $file"
        fi
    done
}

TARGET_DIR=destinationPath/Dir
# 通配符不要加引号,否则Shell不会自动展开
copyFiles sourcePathFiles/filename.*

注意事项

  • 原有代码存在拼写错误:循环内输出的$files是未定义变量,需改为循环变量$file
  • 所有变量引用必须加双引号,兼容带空格、特殊字符的文件名场景
  • 调用函数时通配符不要用单/双引号包裹,否则Shell不会展开通配符,函数只会收到通配符字符串本身
  • 增加目录、文件存在性校验,避免无匹配文件、目标路径不存在时的执行报错

内容的提问来源于stack exchange,提问作者Mohammed Sadiq Afreed Meeran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:00:03