我有一个包含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
我想知道可能存在什么问题,因为在创建管道和工作流程时它会有所帮助。 谢谢!
答案 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
之后指定的命令(搜索是递归的)。