所以我有一个脚本,寻找缺少的" foto""在.txt文件中。
#!/bin/bash
inputDateFmt()
{
sed -e 's/_/ /g' -e 's/\./:/g' <<< "$1"
}
begindatum=$(date -u -d "$(inputDateFmt "2014-10-27_08.01.01")")
einddatum=$(date -u -d "$(inputDateFmt "2014-10-27_18.00.01")")
while [ "$begindatum" != "$einddatum" ]
do
bestandnaam=$(date --date="$begindatum" +"%Y-%m-%d_%H.%M.%S.jpeg")
if [ $(grep -Fx "$bestandnaam" fotos.txt) ]
then
echo "$bestandnaam found"
else
echo "$bestandnaam not found"
fi
begindatum=$(LC_ALL=C date --utc --iso-8601=seconds -d"$begindatum"+1minute)
done
但每当我跑这个时,我得到的回复无效日期。
所以有人说begindatum=$(LC_ALL=C date --utc --iso-8601=seconds -d"$begindatum"+1minute)
永远不会和 $ einddatum 相同。
所以我想在{strong> $ begindatum 变量下添加einddatum=$(LC_ALL=C date --utc --iso-8601=seconds -d"$einddatum")
,这在一个在线bash shell测试程序中有效,但每当我回到我的VM并使用代码时,我得到了再次出错。
#!/bin/bash
inputDateFmt()
{
sed -e 's/_/ /g' -e 's/\./:/g' <<< "$1"
}
begindatum=$(date -u -d "$(inputDateFmt "2014-10-27_08.01.01")")
einddatum=$(date -u -d "$(inputDateFmt "2014-10-27_18.00.01")")
while [ "$begindatum" != "$einddatum" ]
do
bestandnaam=$(date --date="$begindatum" +"%Y-%m-%d_%H.%M.%S.jpeg")
if [ $(grep -Fx "$bestandnaam" fotos.txt) ]
then
echo "$bestandnaam found"
else
echo "$bestandnaam not found"
fi
begindatum=$(LC_ALL=C date --utc --iso-8601=seconds -d"$begindatum"+1minute)
einddatum=$(LC_ALL=C date --utc --iso-8601=seconds -d"$einddatum")
done
这是错误:
student@debian91:~/Downloads/inzending-project2-voorbeeld$ ./scripttt
date: ongeldige datum: ‘ma okt 27 08:01:01 UTC 2014’
not found
date: invalid date 'ma okt 27 08:01:01 UTC 2014+1minute'
date: invalid date 'ma okt 27 18:00:01 UTC 2014'
student@debian91:~/Downloads/inzending-project2-voorbeeld$
答案 0 :(得分:0)
使用LC_ALL=C
,您的本地化日期字符串无法解析为机器可读格式。
更好的整体方法是将日期保留为机器可读的纪元格式(自1970年1月1日午夜起的秒数),并在需要时转换为人类可读的。
但是,如果您真的在寻找一个静态的日期序列,只需生成一次,然后grep
一次。
for hh in {8..18}; do
hfmt=$(printf '%02i\n' "$hh')
printf "2014-10-27_$hfmt.%02i.01.jpeg\n" {0..59}
done |
grep -Fxvf - fotos.txt
获取缺失的条目,同样没有-v
标记,以获取缺少的条目。