gpt4 book ai didi

bash - 通过 (*) 星号字符将文件添加到 for 循环中的变量

转载 作者:行者123 更新时间:2023-12-04 08:50:24 24 4
gpt4 key购买 nike

我有一个文件夹结构,其中两个文件在一个文件夹中。这些文件的名称很长,但由 R1 和 R2 区分。 注意我使用 for 循环在许多文件夹上运行它,但在这个例子中保持简单。 我正在运行一个循环,我想知道如何正确调用带有 (*) 星号的文件来自动完成而无需输入所有文件名。我的尝试如下:

#!/bin/bash

for item in Folder_Directory:
do
forward=$item/*R1*
reverse=$item/*R2*
bbmap.sh ref=reference.fna in1=$forward in2=$reverse outu=Unmapped.fasta
done
我得到的输出是一个错误,因为变量没有识别所需的文件:
错误:
align2.BBMap build=1 overwrite=true fastareadlen=500 ref=reference.fna 
in1=Folder_Dictory/*R1* in2=Folder_Dictory/*R2* outu=Folder_Dictory/Unmapped.fastq
在这个例子中,我可以自动完成文件,但是,当我扩展这个循环以包含多个不再理想的文件夹时。使用 (*) 字符自动完成是我的第一种方法,非常感谢对我的问题的任何其他建议或修复。

最佳答案

问题是shell看到in1=Folder_Dictory/*R1*并注意到没有文件将 glob 与文字 in1= 匹配前缀,因此通配符根本不会扩展。
您可能想在将通配符传递给命令之前对其进行评估,例如

for item in Folder_Directory:
do
forward=$item/*R1*
reverse=$item/*R2*
bbmap.sh ref=reference.fna in1="$(echo $forward)" in2="$(echo $reverse)" outu=Unmapped.fasta
done
如果通配符扩展到多个文件,这当然仍然是不稳定的。

关于bash - 通过 (*) 星号字符将文件添加到 for 循环中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64131133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com