使用bash脚本对目录中的所有文件对执行程序

时间:2019-03-15 10:50:06

标签: bash

我的目录中有一堆文件。我需要创建一个bash文件到qsub并在所有文件对中运行一个程序:

for $file1, $file2 in all_pairs
do
  /path/program -i $file1 $file2 -o $file1.$file2.result
done

所以我可以做:

qsub script.sh

获得:

file1.file2.result
file1.file3.result
file2.file3.result

对于具有以下内容的目录:

file1
file2
file3

2 个答案:

答案 0 :(得分:2)

以下可能是最简单的:

一对a-bb-a不同:

set -- file1 file2 file3 file4 ...
for f1; do 
  for f2; do 
    /path/program -i "$f1" "$f2" -o "$f1.$f2.result"
  done
done

一对a-b等于b-a

set -- file1 file2 file3 file4 ...
for f1; do
  shift
  for f2; do 
     /path/program -i "$f1" "$f2" -o "$f1.$f2.result"
  done
done

答案 1 :(得分:1)

您可以像使用其他每种编程语言一样进行操作:

files=(file1 file2 file3) # or use a glob to list the files automatically, for instance =(*) 
max="${#files[@]}"
for ((i=0; i<max; i++)); do
  for ((j=i+1; j<max; j++)); do
    echo -i "${files[i]}" "${files[j]}" -o "${files[i]}${files[j]}.result"
  done
done

对结果感到满意时,将echo替换为/path/program