web-dev-qa-db-ja.com

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 -lを使っています。ただし、ls -lコマンドを使用している場合は、1990年が一覧表示されます(ファイルが6か月前の場合は常に年が表示されるため)。この場合、default_date値にはyearが含まれます。

ですから、年が来て、条件が崩れていると思います。

2。default.txtを含むファイルのタイムスタンプを6か月以内に変更し、今すぐ確認しましたが、if部分が実行されておらず、else部分が実行されています。

不明なテストオペレーターも取得しています。どこが悪いのか誰か教えてもらえますか?誰かがこれをチェックすることができればそれは大きな助けになるでしょう。

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

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

Kshには、2つのファイルの日付を比較する演算子があります(ash、bash、zshでも使用できますが、POSIXでは使用できません)。日付を読み取るためにlsstatなどを呼び出す必要はありません。シェルにそれらを比較させます。

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