我想浏览文件夹中的所有文件并找出特定日期丢失的文件。
文件按小时分区,文件名有yyyy-mm-dd-hh
格式。
所以之间的2017-07-01
和2017-07-02
将有来自24个文件2017-07-01-00
通过2017-07-01-23
如果我将上述日期作为开始和结束日期,如何找到丢失的每小时文件?
感谢任何输入!
# presuming that the files are e. g. template-2017-07-01-16:
# To test a given date
for file in template-2017-07-01-{00..23}; do
if ! [[ -f "$file" ]]; then
echo "$file is missing"
fi
done
# To test a given year
year=2017
for month in seq -w 1 12; do
dim=$( cal $( date -d "$year-$month-01" "+%m %Y" | awk 'NF { days=$NF} END {print days}' )
for day in $(seq -w 1 $dim); do
for file in template-${year}-${month}-${day}-{00..23}; do
if ! [[ -f "$file" ]]; then
echo "$file is missing"
fi
done
done
done
Run Code Online (Sandbox Code Playgroud)
在 GNU 系统上:
#! /bin/bash -
ret=0
start=${1?} end=${2?}
t1=$(date -d "$start" +%s) t2=$(date -d "$end" +%s)
for ((t = t1; t < t2; t += 60*60)); do
printf -v file '%(%F-%H)T' "$t"
if [ ! -e "$file" ]; then
printf >&2 '"%s" not found\n' "$file"
ret=1
fi
done
exit "$ret"
Run Code Online (Sandbox Code Playgroud)
请注意,在切换到冬季时间的当天(在实施夏令时的时区中),如果在切换的一小时内缺少文件,您可能会收到两次错误消息。$TZ
如果您希望每天 24 小时,请修复为 UTC0(例如,如果创建这些文件的任何内容都使用 UTC 时间而不是本地时间)。