2016-06-13 4 views
0

x日より古いログファイルを指定したディレクトリ内に見つけて削除するスクリプトがあります。シェルの検索と削除のコマンドを画面とログファイルに出力する

find $LOG_ARCHIVE/* -mtime +$DAYS_TO_KEEP_LOGS -exec rm -f {} \; 

これは期待通りに働いているが、私は、画面に処理を印刷し、私はファイル(もしあれば)が削除されたかを知るようにファイルを記録するためのオプションを持っていると思います。私は最後にteeを追加しようとしましたが、成功しませんでした。

find $LOG_ARCHIVE/* -mtime +$DAYS_TO_KEEP_LOGS -exec rm -fv {} \; | tee -a $LOG 

答えて

1

タスクは複数の方法で実行できます。

一つの可能​​性は、単に二回findを実行することです:

find "$LOG_ARCHIVE" -mtime +"$DAYS_TO_KEEP_LOGS" -print > "$LOG" 
find "$LOG_ARCHIVE" -mtime +"$DAYS_TO_KEEP_LOGS" -exec rm -f {} + 

別の可能性としては、(GNU拡張)-print0findへと-0xargsに伴ってteeを使用することです:

find "$LOG_ARCHIVE" -mtime +"$DAYS_TO_KEEP_LOGS" -print0 | 
tee "$LOG" | 
xargs -0 rm -f 

このバージョンでログファイルの各ファイル名の最後にヌルバイトが入ります。あなたが可能なあいまいさを気にしない場合には改行を有するものを置き換えるために手配することができます:

find "$LOG_ARCHIVE" -mtime +"$DAYS_TO_KEEP_LOGS" -print0 | 
tee >(tr '\0' '\n' >"$LOG") | 
xargs -0 rm -f 

これは改行'\n'にNULLバイト'\0'をマッピングするためにtrてログファイルを渡すためにバッシュ(およびKornシェル)process substitutionを使用しています。

printf '%s\n' "[email protected]" >> "$LOG" 
rm -f "[email protected]" 

をしてから使用してください:

それは小さなカスタムスクリプトを記述することであることのもう一つの方法(remove-log.shをそれを呼び出す)スクリプトがの値を参照する必要が

find "$LOG_ARCHIVE" -mtime +"$DAYS_TO_KEEP_LOGS" -exec bash remove-log.sh {} + 

に留意されたいです。 $LOGであるため、環境変数としてエクスポートする必要があります。それはおそらく勝ったものの、スクリプトが(複数回呼び出される可能性があるため、これらの両方を追加する>>を使用することを

find "$LOG_ARCHIVE" -mtime +"$DAYS_TO_KEEP_LOGS" -exec bash remove-log.sh "$LOG" {} + 

注:

logfile="$1" 
shift 
printf '%s\n' "[email protected]" >> "$logfile" 
rm -f "[email protected]" 

プラス:あなたは明示的にログ名を渡すことで、これを避けることができ't be)。 findコマンドを実行する前に、ログファイルが空であることを確認する必要があります。

findのパス引数から/*を削除しました。それは本当に必要ではありませんでした。ファイルのみを削除するには、-type fを追加するとよいでしょう。 +は、xargsを明示的に使用する必要なしに、xargsのようにむしろfindを動作させるfindのPOSIX 2008仕様の機能です。

0
find $LOG_ARCHIVE/* -mtime +$DAYS_TO_KEEP_LOGS -exec sh -c 'echo {} |tee -a "$LOG"; rm -f {}' \; 

試してみて、それが動作するかどうかを確認。

+0

find: '-exec 'への引数がありません – algorhythm

+0

@algorhythmバックスラッシュセミコロンを逃したと思います。 – pdg

+0

ahhはいバックスラッシュは削除されました。今はエラーはありませんが、ファイルは削除されていません – algorhythm

関連する問題