我们有一个每天每小时运行的 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