【问题标题】:Add file by (*) star character to variable in for loop通过(*)星号将文件添加到for循环中的变量
【发布时间】:2021-01-15 17:53:06
【问题描述】:

我有一个文件夹结构,其中两个文件位于一个文件夹中。这些文件具有长名称,但由 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

在此示例中,我可以自动完成文件,但是,当我扩展此循环以包含不再理想的多个文件夹时。使用 (*) 字符自动完成是我的第一种方法,非常感谢任何其他建议或解决我的问题。

【问题讨论】:

    标签: bash loops file variables


    【解决方案1】:

    问题在于,shell 看到 in1=Folder_Dictory/*R1* 并注意到没有与带有文字 in1= 前缀的 glob 匹配的文件,因此通配符根本没有得到扩展。

    您可能希望在将通配符传递给命令之前对其进行评估,例如

    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
    

    如果通配符扩展到多个文件,这当然仍然不稳定。

    【讨论】:

    • 这成功了,谢谢!关于是否有多个具有该扩展名的文件的要点,幸好在这种情况下不适用。感谢您的回复。
    【解决方案2】:

    如果您只想要 folder_structure 中的两个文件,那么我相信使用 find 搜索文件并根据您的要求分配到单独的变量中会很好...看不到使用for 在这里循环。

    forward=$(find Folder_Directory -type f -name "*R1*")
    reverse=$(find Folder_Directory -type f -name "*R2*")
    bbmap.sh ref=reference.fna in1="$forward" in2="$reverse" outu=Unmapped.fasta
    

    【讨论】:

      【解决方案3】:

      它是这样工作的:

      test=f*
      $ echo $test 
      file
      

      但是

      $ echo "$test"
      f*
      

      test2=$test
      $ echo "$test" $test2
      f* file
      
      $ echo "$test" "$test2"
      f* f*
      

      要使其工作,您必须执行以下操作:

      test3="$(echo $test)"
      $ echo "$test" "$test2" "$test3"
      f* f* file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多