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

如何在Shell中遍历目录及子目录下匹配指定模式的文件?

解决遍历当前及子目录匹配文件的问题

问题1:脚本提示shopt: not found

这是因为你的脚本默认用sh(比如dash)执行,而sh不支持shopt命令。解决方法:

  • 在脚本第一行添加bash解释器声明:
    #!/bin/bash
    
  • 或者执行脚本时明确用bash调用:bash your_script.sh

问题2:仅找到子目录中的文件

你用的**/$_pat*里,**/会匹配任意层级的子目录,但不会包含当前目录,所以当前目录下符合$_pat*的文件不会被选中。调整glob模式即可:

  • 同时匹配当前目录和子目录的文件,直接组合两种模式:
    for file in "$_pat"* **/"$_pat"*; do
        # 这里写你的文件处理逻辑,比如echo "$file"
    done
    
  • 建议额外启用nullglob选项,避免无匹配文件时循环把模式字符串当作有效内容处理:
    shopt -s globstar nullglob
    for file in "$_pat"* **/"$_pat"*; do
        if [[ -f "$file" ]]; then  # 可选:仅处理文件,排除目录
            echo "找到文件:$file"
        fi
    done
    

完整示例脚本

#!/bin/bash

# 启用必要的bash选项
shopt -s globstar nullglob

# 定义你的匹配模式
_pat="your_target_pattern"

# 遍历并处理文件
for file in "$_pat"* **/"$_pat"*; do
    if [[ -f "$file" ]]; then
        echo "处理文件:$file"
        # 在这里添加具体的文件操作逻辑
    fi
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:14:59