두 날짜를 비교하는 스크립트를 개발했습니다.
#!/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
이 경우 default_date 값에는 연도가 포함됩니다.
그래서 올해가 다가오면서 컨디션이 안 좋아진 것 같아요.
2.6개월 이내의 타임스탬프를 포함하도록 파일의 타임스탬프를 변경했는데 default.txt
지금 확인해 보니 여전히 if 부분은 실행되지 않고 else 부분은 실행됩니다.
알려지지 않은 테스트 운영자도 만났습니다. 누구든지 무엇이 잘못되었는지 말해 줄 수 있습니까? 누구든지 이것을 확인할 수 있다면 큰 도움이 될 것입니다.
여기서는 두 가지 문제에 직면해 있습니다.
- 이 비교에서는 if 조건이 올바르게 작동하지 않습니다.
- 항상 else 부분만 인쇄합니다.
답변1
Ksh에는 두 파일의 날짜를 비교하는 연산자가 있습니다(ash, bash 및 zsh에서도 사용 가능하지만 POSIX에서는 사용 가능하지 않음). 날짜를 읽기 위해 전화를 걸 ls
거나 아무것도 할 필요가 없습니다 . 쉘이 날짜를 비교하도록 하십시오.stat
for f in *.xml; do
if [[ $f -nt default.txt ]]; then …
done