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이 경우 default_date 값에는 연도가 포함됩니다.

그래서 올해가 다가오면서 컨디션이 안 좋아진 것 같아요.

2.6개월 이내의 타임스탬프를 포함하도록 파일의 타임스탬프를 변경했는데 default.txt지금 확인해 보니 여전히 if 부분은 실행되지 않고 else 부분은 실행됩니다.

알려지지 않은 테스트 운영자도 만났습니다. 누구든지 무엇이 잘못되었는지 말해 줄 수 있습니까? 누구든지 이것을 확인할 수 있다면 큰 도움이 될 것입니다.

여기서는 두 가지 문제에 직면해 있습니다.

  1. 이 비교에서는 if 조건이 올바르게 작동하지 않습니다.
  2. 항상 else 부분만 인쇄합니다.

답변1

Ksh에는 두 파일의 날짜를 비교하는 연산자가 있습니다(ash, bash 및 zsh에서도 사용 가능하지만 POSIX에서는 사용 가능하지 않음). 날짜를 읽기 위해 전화를 걸 ls거나 아무것도 할 필요가 없습니다 . 쉘이 날짜를 비교하도록 하십시오.stat

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

관련 정보