我开发了一个脚本来比较两个日期。
#!/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.txt
6 个月内的时间戳,我现在检查了,但它仍然没有执行 if 部分,而是执行 else 部分。
我还遇到了未知的测试操作员。谁能告诉我哪里出了问题。如果有人可以检查这一点,那将会有很大的帮助。
我在这里面临两个问题:
- 在此比较中,if 条件未正确工作。
- 它始终只打印 else 部分。
答案1
Ksh 有一个运算符来比较两个文件的日期(在 ash、bash 和 zsh 中也可用,但 POSIX 中没有)。您不需要调用ls
orstat
或任何东西来读取日期:让 shell 比较它们。
for f in *.xml; do
if [[ $f -nt default.txt ]]; then …
done