0

我有一个导出日志文件的脚本,通常我会得到 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

有没有办法遍历文件并将它们作为输入包含在内?

4

3 回答 3

3

有必要使用标志吗?

./generateReport file1 file2 file3 > output.html
于 2013-09-04T15:45:40.720 回答
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
于 2013-09-04T15:23:53.123 回答
1

尝试文件名扩展:

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

find用于过去 24 小时内创建的所有日志文件:

./generateReport -i `find . -name "file*" -mtime -1` -o output.html
于 2013-09-04T16:24:15.397 回答