2014-12-05 66 views
2

我有一个包含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 

我在想,可能是什么问题,因为这将是有益的同时创建管道和工作流程。 谢谢!

回答

1

我喜欢用find这是有用的,如果你的文件在嵌套目录:

find /user/test -name '*.txt' -exec fastqc "{}" -o "{}.out" \; 

find将执行-exec所有.txt文件后指定的命令在/用户/试验发现(搜索是递归的)。

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不被认为是变量名称的一部分。

+0

@ bioinfo_123:这个答案有什么问题吗? – anubhava 2014-12-17 15:43:10