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

如何遍历具有可执行权限的文件?解决路径匹配失败问题

解决可执行权限文件的通配符遍历问题

你的问题核心不是文件权限本身,而是shell通配符展开的局限性。可以用以下几种方法解决:

方法1:用find命令准确定位文件

find命令不依赖shell的通配符展开,能直接遍历目录匹配文件名,不受文件执行权限影响。修改你的循环如下:

for i in "${arr[@]}"
do
    find /storage/data -maxdepth 1 -type f -name "${i}_*_R1.fastq.gz"
done
  • -maxdepth 1 限制只在/storage/data目录下查找,不递归子文件夹(如果需要递归,去掉这个参数)
  • -type f 指定只查找文件,排除目录
  • -name 后面的匹配规则和你原来的通配符一致,确保找到对应前缀的文件

方法2:显式遍历通配符匹配的文件

把原来的echo改成一个小循环,让shell强制展开通配符(只要文件存在且你有目录访问权限,就能匹配到):

for i in "${arr[@]}"
do
    for file in /storage/data/${i}_*_R1.fastq.gz
    do
        echo "$file"
    done
done

这种方式会逐个输出所有匹配的文件,即使有多个符合条件的文件也能处理。

方法3:检查shell的glob选项

如果以上方法还是不行,检查你的bash是否开启了影响通配符的选项:

shopt -p nullglob failglob

如果nullglob或failglob被开启,可能导致通配符不展开或报错。可以临时关闭:

shopt -u nullglob failglob

关闭后再运行你的原循环,应该能正常展开通配符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:09:18