2012-05-07 110 views
0

我是新的shell脚本,我发现这个功能在给定的脚本文件。这是什么bash脚本功能

############################## 
# 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 
} 

我明白这是一种应对文件从一个位置到另一个位置。但是,它不是正确的?有人可以解释我究竟是做什么的。

在此先感谢您的帮助

回答

1

它复制_file_src的位置file_dest除非_file_dest已经存在。将打印一条信息性消息,告诉您文件是否已经存在或file_src_将被复制,并且仅当文件是文件时才会移动_file_src。

编辑:忘记提及什么命令>{_file_src}做 - 它只是抹去了源文件的内容。因此,您最终将_file_src的内容移至file_dest,_file_src将为空。我不明白为什么不简单地做一个动作(与mv),然后创建一个空文件,但这是你的问题。

+1

不简单移动文件的主要原因是任何持续打开文件的进程都会继续写入文件,而不管移动。 –

+0

@WilliamPursell - 是的,你是对的。好评。 –

1

如果时间戳文件已经存在,则此代码片段不会执行任何操作,而只是通过printk指示该消息。如果它不存在,它会将源文件复制到它并截断源文件。我猜想你不太了解的这条线是:

>${_file_src} 

该行复制后会截断原始文件。请注意,存在争用条件,并且复制和截断之间写入文件的任何数据都将丢失。