我是shell脚本的新手,我在给定的脚本文件中找到了这个函数。
##############################
# rotate_daily(filename)
rotate_daily() {
_code=0
_file_src=$1
_today=`date '+%Y-%m-%d'`
_file_dest=${_file_src}.${_today}
if [ -f ${_file_dest} ]; then
printk "rotate_daily(): ${_file_dest} already exist"
_code=1
else
if [ -f ${_file_src} ]; then
printk "rotate_daily(): ${_file_src} => ${_file_dest}"
cp -p ${_file_src} ${_file_dest}
_code=$?
>${_file_src}
fi
fi
}
我知道这是一种从一个位置到另一个位置的应对文件。但是,它不是在旋转吗?有人可以解释一下它到底是做什么的。
提前感谢任何帮助
答案 0 :(得分:1)
它将_file_src复制到位置file_dest,除非_file_dest已存在。将打印一条信息性消息,告诉您文件是否已存在或是否将复制file_src_。仅当文件是文件时,它才会移动_file_src。
编辑:忘了提到命令>{_file_src}
的作用 - 它只是清除了源文件的内容。因此,您将_file_src的内容最终移至file_dest,_file_src将为空。我无法理解为什么不简单地做一个移动(使用mv
)然后创建一个空文件,但这是你的问题。
答案 1 :(得分:1)
如果带有时间戳的文件已存在,则此代码段不会执行任何操作,只能通过printk打印消息来指示。如果它不存在,则将源文件复制到该文件并截断源文件。我猜你不太了解的是:
>${_file_src}
该行在复制后截断原始文件。请注意,存在竞争条件,并且在副本和截断之间写入文件的任何数据都将丢失。