スクリプトは毎日同じ名前の新しいファイルを生成し、生成する前に日付タイムスタンプを含む前日のファイルの名前を変更する必要があります。

スクリプトは毎日同じ名前の新しいファイルを生成し、生成する前に日付タイムスタンプを含む前日のファイルの名前を変更する必要があります。

毎日毎時間実行されるUnixジョブがあります。

毎日同じ名前の新しいファイル(abc.xyzなど)を生成するようにスクリプトを更新しようとしています。作成する前に、前日のファイル(abc.xyz.12102014)の名前を日付タイムスタンプに変更する必要があります。

最初の時間にファイルを作成したら、2番目の時間などに同じファイル(abc.xyz)を使用する必要があります。

翌日(13102014)には、このファイル(abc.xyz)をabc.xyz.12102014に名前を変更し、新しいabc.xyzを作成する必要があり、14102014にはabc.xyz.13102014に名前が変更されました。

以下で試しましたが、エラーが発生しました。

if [ $filedate -lt $currdate ]

上記の例では、日付はどこに12 Command Not foundありますか?12

以下のスクリプトにどのような問題があるかを助けてください。

私はUnixに初めて触れたので、使用されたロジックはC#で使用するのと似ています。

他の方法があれば教えてください。

sdate=`date +%Y-%m-%d -d "yesterday"`

file=myfile

currdate=`date +%d`

currmon=`date +%m`

if [ -f $file ]

then

    echo "File exists."

    filedate=$(ls -l $file| awk '{ print $7}')

    if [ $filedate -lt $currdate ]

    then

        echo "Old File"

        cp $file $file.$sdate
        rm $file
    else
##something to do
    fi
else
##something to do
fi

翌月の1日と今月の30/31の日付に対して同様のロジックを実行できますが、再び失敗します。

if [$filemonth -lt $currmonth]

答え1

ファイルを作成する代わりに、abc.xyz(実際の)ファイルへのシンボリックリンクを作成してくださいabc.xyz.YYYYMMDD

linkname="abc.xyz"

today="$( date +"%Y%m%d" )"
filename="$linkname-$today"

if [[ ! -e "$filename" ]] || [[ ! -e "$linkname" ]]; then
    touch "$filename"
    ln -s -f "$filename" "$linkname"
fi

これは生成されます

lrwxr-xr-x  1 kk  kk  16 Feb  2 11:16 abc.xyz -> abc.xyz-20170202
-rw-r--r--  1 kk  kk   0 Feb  2 11:16 abc.xyz-20170202

そして、あなたのプログラムの書き込みはabc.xyz実際にabc.xyz-20170202

翌日、これを実行すると取得できます。

lrwxr-xr-x  1 kk  kk  16 Feb  2 11:31 abc.xyz -> abc.xyz-20170203
-rw-r--r--  1 kk  kk   0 Feb  2 11:16 abc.xyz-20170202
-rw-r--r--  1 kk  kk   0 Feb  2 11:31 abc.xyz-20170203

関連情報