读取名称介于X和Y bash之间的文本文件

时间:2015-01-22 13:02:14

标签: bash file variables

我正在制作一个bash脚本,以便其他系统管理员可以轻松地使用日志文件读取某个文件夹。到目前为止,该脚本读取了两个变量,$ STARTDATE& $ ENDDATE。每天都有一个日志文件,在本例中称为YYYY-mm-dd.log。我希望脚本输出所有日志文件的内容,其名称等于或介于两个变量之间。

例如: 如果我输入2015-01-18的$ STARTDATE和2015-01-20的$ ENDDATE,我希望脚本输出以下内容:

  • 2015-01-18.log
  • 2015-01-19.log
  • 2015-01-20.log

有一种简单的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您使用bash并且可以保证日志文件名格式一致,那么您应该能够使用这样的内容。

startdate=$1
enddate=$2

for logfile in /path/to/logfiles/*; do
    lf=$(basename "$logfile" .log)
    if [[ "$lf" > "$startdate" && "$lf" < "$enddate ]]; then
        echo "### $logfile"
        cat "$logfile"
    fi
done

请注意,我使用的是小写startdateenddate。通常的做法是为shell / etc保留ALL_UPPER个变量。

答案 1 :(得分:1)

dir=.
STARTDATE=2015-01-04; ENDDATE=2015-01-12
dates=`find -s "$dir" -name '*log' | sed -e 's@.*/@@' -e 's/\..*//' | while read file; do [ $file \< $STARTDATE -o $file \> $ENDDATE ] || echo $file; done`
for date in $dates; do cat "$dir"/$date.log; done