Bash - 使用通配符重定向

时间:2013-03-09 20:38:29

标签: bash

我正在测试使用通配符进行重定向。类似的东西:

./TEST* < ./INPUT* > OUTPUT

有人有什么建议吗?谢谢。

3 个答案:

答案 0 :(得分:2)

假设您有以下5个文件:TEST1TEST1INPUT1INPUT2OUTPUT。命令行

./TEST* < ./INPUT* > OUTPUT

将扩展为

./TEST1 ./TEST2 < ./INPUT1 ./INPUT2 > OUTPUT.

换句话说,您将使用2个参数(./TEST1./TEST2)运行命令./INPUT2,其输入重定向自./INPUT1,其输出重定向到{ {1}}。

要解决您可能尝试执行的操作,您只能使用输入重定向指定单个文件。要从两个OUTPUT文件向TEST发送输入,您需要使用以下内容,使用进程替换:

INPUT*

要在匹配./TEST1 < <(cat ./INPUT*) > OUTPUT 的所有输入文件上运行与TEST*匹配的每个程序,请使用以下循环。它收集所有命令的输出并将它们放入单个文件INPUT*

OUTPUT

答案 1 :(得分:1)

  

有一个名为TEST *的程序必须将各种重定向转换为所谓的INPUT *,但问题是有很多TEST程序并且它们都有不同的编号,例如TEST678。我要做的是将所有随机INPUT文件推送到所有TEST程序中。

你可以写:

for program in TEST*            # e.g., program == 'TEST678'
do
  suffix="${program#TEST}"      # e.g., suffix == '678'
  input="INPUT$suffix"          # e.g., input == 'INPUT678'
  "./$program" < "$input"       # e.g., run './TEST678 < INPUT678'
done > OUTPUT

答案 2 :(得分:0)

for test in ./TEST*; do
 for inp in ./INPUT*; do
   $test < $inp >> OUTPUT
 done
done