运行程序以避免覆盖输出

时间:2018-09-21 21:24:49

标签: bash

我有一个程序无法控制的输入

我可以在每个文件上运行程序,如下所示。因此,该程序将输入文件输入为input1,input2和input3,然后运行我的程序并在其中保存多个输出,但是每次将输出覆盖到前一个

for i in {1..3}; do
myprogram input"$i" 
done

我以为我生成了3个文件夹并将输入文件放在此处,然后运行程序,所以也许程序将输出写入那里,但仍然没有成功。

for i in {1..3}; do
myprogram "$i"/input"$i" 
done

基本上,我想执行将输出保存在每个文件中,然后转到另一个文件夹的程序。

反正有办法应对吗?

谢谢

2 个答案:

答案 0 :(得分:0)

如果myprogram始终创建相同的文件名,则可以在执行下一个循环迭代之前将其移开。在此示例中,如果输出是名为out * .txt的文件。

for i in {1..3}; do ./myprogram input"$i"; mkdir output"$i"; mv out*.txt output"$i"/; done

如果创建的文件名不同,则可以在执行应用程序之前创建新目录和cd。

 for i in {1..3}; do mkdir output"$i"; cd output"$i"; ../myprogram ../input"$i"; cd ..; done

答案 1 :(得分:0)

如果它按照注释中的指示覆盖输入文件,则可以通过复制和重命名/移动然后调用程序来保存原始输入文件。然后,如果您确实希望将它们放在子目录中,请建立目录,然后移动输入和/或输出文件。

for i in {1..3}
do
  cp infile$i outfile$i
  ./myprogram outfile$i
  mkdir programRun-$i 
  mv infile$i outfile$i programRun-$i
done

如果它不理会输入文件,而只是输出为一致的文件名,则类似

for i in {1..3}
do
  ./myprogram infile$i
  mkdir programRun-$i 
  mv outfile programRun-$i/outfile-$i
done

请注意,无论哪种情况,我都将考虑使用与$i不同的变量来标识程序的运行方式-可能是YYYMMDDHHMMSS格式的时间/日期,或者只是unix时间戳。仅出于组织目的,这样既可以将给定运行中的所有输出文件放在一起,又可以满足您的需求。