kshでファイル時間を比較する

kshでファイル時間を比較する

2つの日付を比較するスクリプトを開発しました。

#!/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

ここで私は2つの問題に直面しています。

1.これには、タイムスタンプを前の時刻(1990年など)に設定する必要がある基本ファイルがあります。touch -tタイムスタンプを使用してこれを行うことができることを知っています。

kshを使用していますが、ここにstatは存在しません。だから私はls -lls -lこの場合、default_date の値には年が含まれます。

だから今年が近づいてコンディションが良くなかったようです。

2.6ヶ月以内のタイムスタンプを含めるようにファイルのタイムスタンプを変更しましたが、default.txt今確認してみると、まだif部分は実行されず、else部分は実行されます。

未知のテストオペレータも会った。誰でも何が間違っているのか教えてもらえますか?誰もがこれを確認できれば大きな助けになります。

ここでは2つの問題に直面しています。

  1. この比較では、if条件は正しく機能しません。
  2. 常にelse部分のみを印刷します。

答え1

Kshには、2つのファイルの日付を比較する演算子があります(ash、bash、zshでも使用可能ですが、POSIXでは使用できません)。日付を読むために電話をかけlsたり何もする必要はありません。シェルに日付を比較させる。stat

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

関連情報