脚本必须每天创建一个具有相同名称的新文件,在创建之前必须使用日期时间戳重命名前一天的文件

脚本必须每天创建一个具有相同名称的新文件,在创建之前必须使用日期时间戳重命名前一天的文件

我们有一个每天每小时运行的 Unix 作业。

我们希望更新脚本以每天创建一个具有相同名称的新文件(例如 abc.xyz),在创建之前必须使用日期时间戳重命名前一天的文件(abc.xyz.12102014)。

在第一小时,如果创建文件,第二小时等,则必须使用相同的文件(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

对于当月 30/31 与下个月 1 日的日期相比,我可以执行类似的逻辑,但它再次失败

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

相关内容