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

bash中使用find函数遍历子文件夹迭代运行程序无响应问题咨询

错误原因
  • 查找范围配置错误:你在find命令中添加了-maxdepth 1参数,只会搜索~/test一级目录下的vcf文件,不会遍历子目录。如果目标vcf文件存放在子目录中,find不会返回任何结果,循环自然不会执行,和你调试时仅输出find执行日志、无后续程序运行日志的表现完全匹配。
  • 输出路径拼接错误:find返回的$FILE是包含完整路径的字符串(例如/home/yourname/test/subdir/sample.vcf),直接拼接~/test/annotTest/$FILE.vcf.gz会生成非法路径,dotnet程序会因无法写入不存在的路径直接退出,关闭错误输出的场景下就会表现为“没有任何反应”。
  • 写法存在鲁棒性缺陷:用for循环直接遍历find输出、变量不加双引号的写法,在文件名包含空格、换行、特殊字符时会出现参数拆分错误,导致程序接收的输入路径异常。
修复方案

首先确认输出目录存在,再改用更安全的find+while read写法,提取纯文件名做输出路径拼接,代码如下:

mkdir -p ~/test/annotTest
find ~/test -type f -name '*.vcf' | while read -r FILE; do
    FILE_BASENAME=$(basename "$FILE")
    dotnet ~/Nirvana/Nirvana.dll \
     -c ~/Nirvana/Data/Cache/GRCh37/Both \
     --sd ~/Nirvana/Data/SupplementaryAnnotation/GRCh37 \
     -r ~/Nirvana/Data/References/Homo_sapiens.GRCh37.Nirvana.dat \
     -i "$FILE" \
     -o ~/test/annotTest/"${FILE_BASENAME}".gz 
done
验证方法

执行循环前可先单独运行find命令确认可以匹配到目标文件:
find ~/test -type f -name '*.vcf'
如果有返回结果,再执行上述循环即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:06:03