0

我是 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
}

我知道这是一种从一个位置到另一个位置的应对文件。但是,它没有旋转对吗?有人可以解释一下它的真正作用。

提前感谢您的帮助

4

2 回答 2

1

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

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

于 2012-05-07T10:49:09.093 回答
1

如果时间戳文件已存在,则此代码片段仅通过 printk 打印一条消息,表明这一点。如果它不存在,它将源文件复制到它并截断源文件。我猜你不太明白的那一行是:

>${_file_src}

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

于 2012-05-07T10:52:27.097 回答