毎日毎時間実行される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