Bash脚本对所有.log文件运行

时间:2014-09-22 06:59:29

标签: bash unix

我目前有一个名为(log2csv)的bash脚本。在当前目录中,我可以输入终端:

log2csv *.log

这将在当前目录中的每个.log文件上运行脚本。

或者我可以使用

对单个.log文件运行它

log2csv test1.log

我可以在脚本中包含* .log,而不是输入log2csv *.log吗?所以我只需在目录中键入log2csv即可运行。我知道我可以别名,但我宁愿让脚本去做。

这是我正在运行的bash脚本:

#!/bin/bash

for path
do 
      base=$(basename "$path")
      noext="${base/.log}"
      [ -e "${noext}.csv" ] && continue
      /Users/joshuacarter/bin/read_scalepack.pl "$path" > "${noext}.csv"

done

1 个答案:

答案 0 :(得分:4)

变化:

for path

为:

for path in *.log

或者,或许更好:

names=( "$@" )
if [ "${#names}" = 0 ]
then names=( *.log )
fi
for path in "${names[@]}"

您可以考虑是否也设置shopt -s nullglob等选项。这使用shell数组来处理其中包含空格等的名称。如果没有给出命令行参数,它将使用命令行参数,如果没有命令行参数,则会扩展*.log中的文件列表。