ログファイルの名前を変更して圧縮する

スクリプト名: logrevolver.sh
書式: logrevolver.sh [ -d 削除文字列 ] ファイル名...
目的: ログをローテートする
戻り値: すべて成功:0 一部またはすべて失敗:1 エラー:9

#!/bin/sh
. Error_Msg.sh && . Arg_Nums.sh && . Chk_File.sh || exit 9
Arg_Nums -ge 1 "$@" || exit 9

if [ "$1" = -d ]; then
    _DEL=$2
    shift 2
fi

#指定ファイルをそれぞれ処理する
for _LOG in "$@"; do

    #ディレクトリの許可属性とファイルの確認
    Chk_File -drwx "$(dirname "$_LOG")" ||\
        { Error_Msg "$0" "$(dirname "$_LOG"): Permission denied.";\
        _RETURN=1; continue; }
    [ -f "$_LOG" ] ||\
        { Error_Msg "$0" "$_LOG: File did not exist." _RETURN=1 continue; }

    #最終更新日から日付フォーマットを生成
    _DATE=$(date -r "$_LOG" +%Y%m%d)

    #新ファイル名の生成
    _LOG_NEW=$(echo "$_LOG" | sed "s/$_DEL$/-$_DATE/")

    #新ファイル名を持つ既存ファイルの確認
    [ -f "$_LOG_NEW" -o -f "$_LOG_NEW.gz" ] &&\
        { Error_Msg "$0" "$_LOG_NEW or $_LOG_NEW.gz already exists.";\
        _RETURN=1; continue; }

    #新ファイル名への名前変更と圧縮
    mv "$_LOG" "$_LOG_NEW"
    gzip "$_LOG_NEW"
done
exit $_RETURN