循环遍历目录中的所有输入并使用输入名称创建输出目录

时间:2014-12-05 14:57:09

标签: bash loops

我有一个包含10个不同文件的目录,我需要对所有文件运行相同的命令,但是将结果保存在单独的目录中,这些目录是我输入文件名唯一的结果目录名称。我了解到我的问题类似于Looping through all the inputs and creating distinct output files,因此我尝试了以下代码:

cd /user/test

for i in *.txt
do 
   fastqc $i -o {$i}.out
done

我收到错误:

Specified output directory '{1.txt}.out' does not exist
Specified output directory '{2.txt}.out' does not exist

我想知道可能存在什么问题,因为在创建管道和工作流程时它会有所帮助。 谢谢!

2 个答案:

答案 0 :(得分:2)

您外面有{},您需要使用:

cd /user/test    
for i in *.txt; do
   fastqc "$i" -o "${i}.out"
done

或者只是:

for i in *.txt; do
   fastqc "$i" -o "$i.out"
done

由于DOT不被视为变量名称的一部分。

答案 1 :(得分:1)

我喜欢使用find,如果您的文件位于嵌套目录中,这将非常有用:

find /user/test -name '*.txt' -exec fastqc "{}" -o "{}.out" \;
对于在/ user / test中找到的所有.txt文件,

find将执行-exec之后指定的命令(搜索是递归的)。