多个文件作为bash脚本中的参数

时间:2013-09-04 15:17:47

标签: linux bash

我有一个导出日志文件的脚本,通常我会在1-3个单独的文件之间取决于特定日期的日志大小。导出后,我运行一个报告生成器来吐出这些日志的html文档。我的问题是如何调用生成报告的命令,具体取决于文件的数量,我知道我可以使用if语句并执行:

./generateReport -i file1 -o output.html

./generateReport -i file1 file2 -o output.html

./generateReport -i file1 file2 file3 -o output.html

有没有办法循环文件并将它们作为输入包含?

3 个答案:

答案 0 :(得分:3)

是否需要使用标志?

./generateReport file1 file2 file3 > output.html

答案 1 :(得分:2)

以下内容将收集一个inputFiles数组,以及一个带有输出文件名的单个变量:

inputFiles=( )
outputFile=
while (( $# )); do
  if [[ $1 = -o ]]; then
    outputFile=$2; shift
  elif [[ $1 = -i ]]; then
    inputFiles+=( "$2" ); shift
  else
    inputFiles+=( "$1" )
  fi
  shift
done

......那么,你可以这样做:

# redirect stdout to the output file, if one was given
[[ $outputFile ]] && exec >"$outputFile"

# loop over the input files and process each one
for inputFile in "${inputFiles[@]}"; do
  process "$inputFile"
done

答案 2 :(得分:1)

尝试文件名扩展:

./generateReport -i file? -o output.html

或对过去24小时内创建的所有日志文件使用find

./generateReport -i `find . -name "file*" -mtime -1` -o output.html