在Bash中使用指定路径迭代目录

时间:2016-06-21 17:12:36

标签: regex bash file loops directory

pathToBins=$1

bins="${pathToBins}contigs.fa.metabat-bins-*"

for fileName in $bins
do
    echo $fileName

done

我的目标是将路径附加到我的文件名。当我没有附加路径时,我可以遍历文件夹并获取文件名。我的挑战是,当我添加路径echo fileName时,我的正则表达式不再有效,我得到了" /home/erikrasmussen/Desktop/Scr​​ipt/realLargeMetaBatBinscontigs.fa.metabat-bins - *"正则表达式' *'被视为一个字符串。如何在迭代文件夹时获取路径和完整文件名?

1 个答案:

答案 0 :(得分:1)

虽然我真的不知道你的文件是如何安排在你的硬盘上的,但偶然看一眼"/home/erikrasmussen/Desktop/Script/realLargeMetaBatBinscontigs.fa.metabat-bins-*"表明它在{{1}之前缺少 / }。如果是这种情况,那么您应该将bin的定义更改为:

contigs

但是,使用bash数组而不是依赖文件名来包含空格和元字符要强得多。所以我建议:

bins="${pathToBins}/contigs.fa.metabat-bins-*"

Bash通常不会展开与任何文件都不匹配的模式,因此在这种情况下您将看到原始模式。如果你使用上面的数组公式,你可以设置bash选项bins=(${pathToBins}/contigs.fa.metabat-bins-*) for fileName in "${bins[@]}" do echo "$fileName" done ,这将导致不匹配的模式消失,留下一个空数组。