比较 ksh 中的文件时间

比较 ksh 中的文件时间

我开发了一个脚本来比较两个日期。

#!/bin/ksh

####################################################################
#
#DECLARING ALL THE VALUES AND PATHS
#
####################################################################

LOG_FOLDER=/user/sba-appl/test/sscr/ramu
TARGET_DIR=/user/sba-appl/test/sscr/ramu

###################################################################
#
#GETTING THE TIME STAMP OF THE FILE
#
####################################################################

cd $TARGET_DIR
DEFAULT_DATE=`ls -l /$TARGET_DIR/default.txt| awk '{print $6,$7,$8}'`
printf "$DEFAULT_DATE \n"
for f in *.xml
    do
        echo "Processing $f"
        FILE_DATE=`ls -l /$TARGET_DIR/$f|awk '{print $6,$7,$8}'`
        printf "$FILE_DATE \n"
        echo "dafault filedate is $DEFAULT_DATE"
        if [ $FILE_DATE -gt $DEFAULT_DATE ]
        then
            echo "Call the Jar for the file $f"
        else
            echo "Do not call the Jar for the file $f"
        fi
done

这里我面临两个问题:

1.在此我们有一个默认文件,该文件时间戳应设置为旧时间,例如 1990 年。我知道这可以在touch -t时间戳的帮助下完成。

我正在使用 ksh,但此处不存在 stat。所以我正在使用ls -l.但如果我使用ls -l命令,那么它将列出 1990 年(因为如果文件早 6 个月,它总是会列出年份)。在这种情况下,我的 default_date 值将包含年份。

所以我认为我的条件失败了,因为今年即将到来。

2.我更改了文件的时间戳,包括default.txt6 个月内的时间戳,我现在检查了,但它仍然没有执行 if 部分,而是执行 else 部分。

我还遇到了未知的测试操作员。谁能告诉我哪里出了问题。如果有人可以检查这一点,那将会有很大的帮助。

我在这里面临两个问题:

  1. 在此比较中,if 条件未正确工作。
  2. 它始终只打印 else 部分。

答案1

Ksh 有一个运算符来比较两个文件的日期(在 ash、bash 和 zsh 中也可用,但 POSIX 中没有)。您不需要调用lsorstat或任何东西来读取日期:让 shell 比较它们。

for f in *.xml; do
  if [[ $f -nt default.txt ]]; then …
done

相关内容