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

Shell脚本中如何筛选排除以_0.xml结尾的文件

Shell脚本中如何筛选排除以_0.xml结尾的文件

嗨,我来帮你搞定这个问题!你现在需要在Shell脚本里筛选出符合特定命名模式,但排除以_0.xml结尾的文件,这里有几个实用的方法可以选:

  • 方法一:利用Bash扩展通配符(简洁高效)
    Bash的扩展通配符能实现更灵活的匹配规则,不过需要先开启extglob选项。你可以在脚本里这样写:

    # 开启扩展通配符(如果脚本未默认开启)
    shopt -s extglob
    
    # 修改后的匹配规则,自动排除_0.xml结尾的文件
    FILES_TO_VALIDATE="$FTP_DEST"/patternorderresponse_[0-9][0-9][0-9][0-9][0-9][0-9][0-9]_UTC*!(_0).xml
    

    这里的!(_0)是扩展通配符的语法,意思是“匹配不是_0的内容”,刚好能把patternorderresponse_xxxxxxx_UTCxxxx_0.xml这类文件排除在外,同时保留其他符合开头模式的XML文件。

  • 方法二:用grep反向过滤(兼容性好)
    如果你不想依赖Bash的扩展特性,可以先获取所有符合原模式的文件,再用grep -v反向排除目标文件:

    # 先获取原模式匹配的所有文件,再过滤掉_0.xml结尾的
    FILES_TO_VALIDATE=$(ls "$FTP_DEST"/patternorderresponse_[0-9][0-9][0-9][0-9][0-9][0-9][0-9]_UTC*.xml | grep -v "_0\.xml$")
    

    注意这里的_0\.xml$里,点号需要转义(\.),$表示匹配行尾,确保只排除刚好以_0.xml结尾的文件。不过要注意,如果文件名包含空格或特殊字符,ls的输出可能会出问题,这种情况下更推荐用下面的方法。

  • 方法三:用find命令(安全可靠,适配特殊文件名)
    find命令处理带空格、特殊字符的文件名更稳妥,还能避免一些通配符的坑:

    # 查找指定目录下符合模式的文件,排除_0.xml结尾的
    FILES_TO_VALIDATE=$(find "$FTP_DEST" -maxdepth 1 -type f -name "patternorderresponse_[0-9][0-9][0-9][0-9][0-9][0-9][0-9]_UTC*.xml" ! -name "*_0.xml")
    

    参数说明:

    • -maxdepth 1:只查找$FTP_DEST目录本身,不递归子目录
    • -type f:只匹配普通文件(排除目录等)
    • ! -name "*_0.xml":明确排除以_0.xml结尾的文件

要是你用的是Bash环境,方法一最简洁;如果需要跨Shell兼容,或者处理复杂文件名,方法三会更靠谱。

备注:内容来源于stack exchange,提问作者AnaGutiFontan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 10:19:32