2012-05-07 12 views
0

私はシェルスクリプトを初めて使用しています。このスクリプトは特定のスクリプトファイル内にあります。この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 
} 

私はこれがある場所から別の場所に対処ファイルのようなものだと理解しています。しかし、それは右回転していないのですか?誰かが実際に何をしているか私に説明することができます。場所file_destに任意のヘルプ

答えて

1

それをコピーし_file_srcを事前に

おかげ_file_destがすでに存在している場合を除きます。ファイルがすでに存在するか、file_src_がコピーされるか、_file_srcがファイルの場合にのみ_file_srcを移動するという情報メッセージが表示されます。

EDIT:コマンド>{_file_src}が何をしているのか忘れました。ソースファイルの内容を消去します。したがって、_file_srcの内容を最後にfile_destに移動させ、_file_srcは空にします。私はなぜ単純に移動(mv)をして空のファイルを作成しないのか理解できませんが、それはあなたの質問です。

+1

単純にファイルを移動させない主な理由は、ファイルを保持しているすべてのプロセスが、移動に関係なくファイルへの書き込みを継続することです。 –

+0

@WilliamPursell - はい、そうです。良いコメント。 –

1

タイムスタンプファイルがすでに存在する場合、このコードスニペットはprintkを介してメッセージを出力します。存在しない場合は、ソースファイルをコピーしてソースファイルを切り捨てます。あなたがよく理解していない行は、次のように推測されます。元のファイルがコピーされた後、その行が切り詰められます。競合状態が存在し、コピーと切り捨ての間にファイルに書き込まれたデータは失われます。

関連する問題