如何将输出重定向到BASH中的不同目录?

时间:2010-12-03 02:52:53

标签: bash unix

我有3个目录:/ home / user / control4,/ home / user / control8,/ home / user / control16

我编写了一个脚本文件,其中有两个循环,第一个是运行模拟,生成3个名为cc1.txt cc2.txt和cc3.txt的文件,第二个循环用于目录名称

我喜欢分别将cc1.txt,cc2.txt,cc3.txt指向/ home / user / control4,/ home / user / control8,/ home / user / control16。在BASH中执行此操作的确切语法是什么?

感谢您的帮助。

我的脚本文件看起来像这样

#!/user/bin/bash
for j in $(4 8 16 ) # loop for directories
do
for i in $(seq 1 3) # loop for simulations  
do
.... produce cc1.txt cc2.txt cc3.txt 
done

如何将三个文件输出到相应的目录?像/home/user/control$j/cc$i.txt?

完成

3 个答案:

答案 0 :(得分:1)

cat cc$i.txt > /home/user/control$j/cc$i.txt

答案 1 :(得分:1)

for j in /home/user/control{4,8,16}
do
    for i in cc{1,2,3}.txt
    do
        produce "$j/$i"
    done
done

这将产生九个文件。如果你希望每个目录有一个文件,总共有三个文件,那么一些数学可能就可以了。

for i in {1..3}
do
    produce "/home/user/control$((2*2**i))/cc$i.txt"
done

答案 2 :(得分:0)

如果我正确地阅读你的脚本,你最终会得到9个文件:cc1到3各自位于目录control4,8和16.但是,你的文字描述意味着你只需要3个文件:control4 / cc1.txt,control8 / cc2.txt和control16 / cc3.txt。

如果您确实有一个名为produce的命令将输出文件作为参数,并且您只需要3个文件,我只需指定三个输出目录&手动编写文件,不用担心循环。

如果您确实有一个名为produce的命令,它将输出文件作为参数,并且您想要总共9个文件,那么是,控制$ j / cc $ i.txt将会这样做。

如果您没有名为produce的命令将输出文件作为参数(即代码示例中的那行是伪代码),并且生成数据的命令只会将这些文件转储出去你指定任何东西,那么我认为你完成后必须mv cc1.txt control4 ; mv cc2.txt control8 ; mv cc3.txt control16