【问题标题】:How to redirect output to different directory in BASH?如何将输出重定向到 BASH 中的不同目录?
【发布时间】:2010-12-03 02:52:52
【问题描述】:

我有 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 之类的东西?

完成

【问题讨论】:

    标签: bash unix


    【解决方案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
    

    【讨论】:

    • 亲爱的丹尼斯-你的第二个答案更接近我想要的。上一个答案确实会产生 9 个文件。干杯-你们的人都睡了吗?
    【解决方案2】:
    cat cc$i.txt > /home/user/control$j/cc$i.txt
    

    【讨论】:

    • 对了,我忘了 cat - 它是 control$j 而不是 control/$j?干杯安德烈亚斯
    【解决方案3】:

    如果我没看错你的脚本,你最终会在 control4、8 和 16 目录中得到 9 个文件:cc1 到 3。但是,你的文字描述暗示你总共只需要 3 个文件:control4/ cc1.txt、control8/cc2.txt 和 control16/cc3.txt。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 2014-12-24
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多