日期无效| linux sh脚本

时间:2017-12-29 15:06:45

标签: linux date sh

所以我有一个脚本,寻找缺少的" 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$

1 个答案:

答案 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标记,以获取缺少的条目。