首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环迭代文件扩展名多次导致文件/路径错误:没有这样的文件

循环迭代文件扩展名多次导致文件/路径错误:没有这样的文件
EN

Stack Overflow用户
提问于 2022-08-16 23:16:33
回答 1查看 43关注 0票数 0

直到几天前,我才开始为生物信息学项目使用bash for -循环,直到几天前,它才突然停止工作。我在OSX V12.1上。

命令:

代码语言:javascript
复制
for FILE in `ls *.fasta` 
do
F=$(basename "$FILE".fasta) COMMAND -f "$F".input -o "$F".output 
done

这是一个非常简单的for-循环,但是从三天前开始,它开始迭代文件扩展名并给出这个错误:

文件/路径错误:没有这样的文件:“FILE.fasta.fasta”

我不知道是怎么回事。我试过取消F和FILE的设置,但这没有效果。我做了一个老的“把所有的东西都关回去”,这也不起作用。我已经尽力在互联网上寻找一个解决方案,但我可能错过了正确的术语,因为我出现了空白。

我使用的生物信息学软件是Anvi'o,但我不认为这是问题所在。

EN

回答 1

Stack Overflow用户

发布于 2022-08-17 02:15:06

我不知道你为什么要做F=$(basename "$FILE".fasta);这似乎不需要(?)此外,文件名已经是完整的文件名,所以"$FILE".fasta应该是$FILE。这就是为什么你要得到“没有这样的文件:'FILE.fasta.fasta'”错误。它一直都是这样工作的,所以我不知道它以前是如何工作的。

类似地,"$F".input将留给您filename.fasta.input,这可能不是您想要的。您可以使用$varname:r${varname:r}从文件名中删除扩展名("r“,如”删除扩展名“中的”r“)。注意,这只适用于zsh,而不是bash,在bash中,您必须使用更尴尬的${varname%.*}

您也不需要使用ls来迭代文件;它是用于人工显示的,而不是programs.You可以循环使用任何glob模式的文件,这要容易得多,而且不容易出错:

代码语言:javascript
复制
for FILE in *.fasta

如果把这些加在一起,你就会得到这样的结果:

代码语言:javascript
复制
for FILE in ./*.fasta; do
    COMMAND -f ${FILE:r}.input -o ${FILE:r}.output 
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73381284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档