0

私はシェルスクリプトを初めて使用し、特定のスクリプトファイルでこの関数を見つけました。

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

タイム スタンプ付きのファイルが既に存在する場合、このコード スニペットは、そのことを示すメッセージを printk 経由で出力するだけです。存在しない場合は、ソース ファイルをそこにコピーし、ソース ファイルを切り捨てます。あなたがよく理解していない行は次のとおりだと思います。

>${_file_src}

その行は、コピー後に元のファイルを切り捨てます。競合状態が発生し、コピーと切り捨ての間にファイルに書き込まれたデータが失われることに注意してください。

于 2012-05-07T10:52:27.097 に答える
1

_file_dest が存在しない限り、_file_src を file_dest にコピーします。ファイルが既に存在するか、または file_src_ がコピーされるかを示す情報メッセージが出力されます。ファイルの場合のみ _file_src も移動します。

編集: コマンドの機能について言及するのを忘れていました>{_file_src}。ソース ファイルの内容を消去するだけです。したがって、_file_src の内容は最後に file_dest に移動され、_file_src は空になります。mv単純に move(with ) を実行してから空のファイルを作成しない理由がわかりませんが、それがあなたの質問です。

于 2012-05-07T10:49:09.093 に答える