在多个文件上运行命令并为每个输出指定唯一的名称

kev*_*v93 2 shell bash files

我想对文件夹中的所有文件运行一个脚本,如下所示:

sh script.sh *.fasta > output
Run Code Online (Sandbox Code Playgroud)

但是我希望每个输入的输出都位于单独的文件中。因此,不是通过命令获取 5 个文件并将它们全部放入名为“output”的文件中,有没有办法让输出成为文件名,并在末尾添加后缀(如“_output”)?

所以如果我有 3 个文件,例如:

file1.fasta
file2.fasta
file3.fasta
Run Code Online (Sandbox Code Playgroud)

有没有办法可以运行这样的命令:

sh script.sh *.fasta
Run Code Online (Sandbox Code Playgroud)

并为每个输入输出这样的新文件:

file1_new.fasta
file2_new.fasta
file3_new.fasta
Run Code Online (Sandbox Code Playgroud)

我尝试了命令:

sh script.sh *.fasta > *_output.fasta
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我还尝试将所有感兴趣的文件分配给这样的变量,他认为如果我首先将它们分配给变量,也许我可以以某种方式重命名输出:

allthefiles= *.fasta
Run Code Online (Sandbox Code Playgroud)

但这也不起作用。我不知道该怎么称呼这个问题,如果已经被问过,很抱歉!如何通过命令运行多个文件并为每个输入提供新的输出?

PSk*_*cik 5

for f in *.fasta; do 
    sh script.sh "$f" > "${f%.*}_output.fasta"; 
done

# ${f%.*} strips a shortest match of `.*` from the end of "$f"
# (= strips .fasta)
Run Code Online (Sandbox Code Playgroud)