如何在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
相关产品推荐
相关产品推荐

