【发布时间】:2021-11-21 08:41:34
【问题描述】:
我想对目录中特定扩展名的所有文件运行循环:
for i in *.bam
do
...
done
但是,如果我在循环中运行的命令创建了一个具有相同扩展名的临时文件,则循环也会尝试处理这个新的 tmp 文件。这是不希望的。因此,我认为以下方法可以解决问题:首先列出目录中的所有 *.bam 文件,将该列表保存到一个变量中,然后遍历这个保存的列表:
list_bam=$(for i in *.bam; do echo $i; done)
for i in $list_bam
do
...
done
令我惊讶的是,这遇到了同样的问题!有人可以解释一下这背后的逻辑以及如何解决它,以便循环只处理预先存在的 .bam 文件吗?
【问题讨论】:
-
echo $list_bam没有给出列表。它只是给出*.bam。您可能必须将列表保存到文件并从中读取。 -
当我在我的目录中运行
list_bam=$(for i in *.bam; do echo $i; done),然后调用echo $list_bam,我得到了文件名列表。 -
但是,如果我在循环中运行的命令创建了一个具有相同扩展名的临时文件,那么循环也会尝试处理这个新的 tmp 文件。 那是不可能的。
-
这对我来说似乎也是不可能的,这就是我如此困惑的原因。
-
我无法重现此问题。一个示例命令
for i in *.bam; do cp $i bu.$i; echo $i; sleep 0.1; done仅适用于初始文件,正如人们所期望的那样。