我有一堆 Splunk 存储桶(目录),其名称中包含两个纪元时间戳。我需要找到一种方法对这些文件名执行查找,以找到第二个纪元时间在 1488344400(2017 年 3 月 1 日)和 1497499200(2017 年 6 月 15 日)之间的任何文件。文件名的格式如下:
db_1274129994_1273525194_0 (db_latesttime_earliesttime_idnum)
“最早时间”是决定因素,因为最晚时间可能会超出日期。
答案1
使用bash
:
for d in db_*_*_*; do
if [[ "$d" =~ db_([0-9]*)_([0-9]*) ]]; then
if [[ "${BASH_REMATCH[2]}" -ge 1488344400 ]] &&
[[ "${BASH_REMATCH[2]}" -le 1497499200 ]]; then
printf 'Found "%s"\n' "$d"
fi
fi
done
这会迭代db_*_*_*
当前目录中的所有名称。如果任何名称与正则表达式匹配db_([0-9]*)_([0-9]*)
,则对名称中找到的两个数字中的最后一个进行数字比较。如果比较结果为真,则该名称将在标准输出中报告。
答案2
ls /path/to/your/buckets | awk -F_ '$3 >= 1488344400 && $3 <= 1497499200'
注:一般情况下,不能解析ls
,但由于我们知道我们的文件名不会包含特殊字符,所以我们不应该遇到麻烦在这种特殊情况下。
至于awk
: 我们简单地定义_
为字段分隔符并打印第三个字段(根据您的“最早时间”)位于您提到的纪元时间之间的所有行。
答案3
和巴什:
for f in db_[0-9]*_[0-9]*; do
e_time="${f:14:10}" # extracting 'earliest time'
if [ $e_time -ge 1488344400 ] && [ $e_time -le 1497499200 ]; then
echo "$f"
fi
done