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

Bash脚本实现目录文件迁移并跳过指定目录,解决无匹配文件报错问题

问题解决:Bash脚本无匹配文件时避免报错并正确跳过指定目录

原脚本的核心问题

  1. 变量名不匹配:定义了src_file_dir和tgt_file_dir,但循环里使用未定义的$src和$tgt,导致路径解析错误。
  2. ls遍历的缺陷:当Albt_Src_*.txt无匹配文件时,ls会直接输出错误信息,被for循环读取后执行mv命令,引发报错。
  3. 未满足跳过目录需求:需求是跳过SrcFiles_Backup目录,但原脚本用了grep -v "Old_Files",不符合要求。

修改后的脚本

#!/bin/bash
shopt -s nullglob  # 开启nullglob选项:通配符无匹配时返回空列表

src_file_dir="/test/dev_env/proj/Data/ALB/ALBT/SrcFiles"
tgt_file_dir="/test/dev_env/proj/Data/ALB/ALBT/TgtFiles"

# 遍历SrcFiles下的Albt_Src_*.txt文件,排除SrcFiles_Backup目录
for file in "${src_file_dir}"/Albt_Src_*.txt; do
    # 跳过目标目录(若该目录存在)
    if [[ "${file}" != "${src_file_dir}/SrcFiles_Backup" ]]; then
        mv "${file}" "${tgt_file_dir}/"
    fi
done

shopt -u nullglob  # 关闭nullglob选项,恢复默认行为

关键修改点说明

  • 开启nullglob选项:当通配符Albt_Src_*.txt无匹配文件时,返回空列表,for循环直接跳过,避免执行错误的mv命令。
  • 直接用通配符遍历:替代ls命令,避免解析ls输出时遇到文件名含空格、特殊字符的问题,提升脚本健壮性。
  • 修正变量引用:统一使用定义好的src_file_dir和tgt_file_dir,确保路径正确。
  • 引号包裹变量:防止文件名含特殊字符时出现解析错误。
  • 跳过指定目录:通过条件判断排除SrcFiles_Backup目录,符合需求。

额外优化:递归处理子目录(可选)

如果需要递归处理SrcFiles下所有子目录中的目标文件,但跳过SrcFiles_Backup目录,可使用find命令:

#!/bin/bash
src_file_dir="/test/dev_env/proj/Data/ALB/ALBT/SrcFiles"
tgt_file_dir="/test/dev_env/proj/Data/ALB/ALBT/TgtFiles"

find "${src_file_dir}" -type f -name "Albt_Src_*.txt" -not -path "${src_file_dir}/SrcFiles_Backup/*" | while read -r file; do
    mv "${file}" "${tgt_file_dir}/"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:55:25