ファイル構成のダミー作成

サマリー

ツール名 シェル名 内容
ファイル構成のダミー作成 touch_loop.sh 任意のディレクトリからファイルサイズ以外のファイル構成をコピーする


更新機歴

こちらのページ

ソースファイル

#!/bin/bash

########################################################################
# touch_loop.sh ファイル構成のダミー作成プログラム
#
# usage      : touch_roop.sh (target_dir) (dummy_dir)
#              引数は完全パスで指定。(dummy_dir)は省略可能。
# premise    : $1のディレクトリが存在すること
#
# Created    : 2014/03/16
# Updated    : -
# Publisher  : akira  takeuchi
#
########################################################################

# ----------------------------------------------------------------------
# SET PATH (環境に合わせて変更してください)
# ----------------------------------------------------------------------
TARGET_DIR="$1"
DUMMY_DIR="$2"

PWD=`pwd`
LOG_FILENAME="touch_loop_result.log"

# ----------------------------------------------------------------------
# FUNCTION DEFINITION (これ以降は変更しないでください)
# ----------------------------------------------------------------------
LOG_FILE=${PWD}/${LOG_FILENAME}

# ログ出力関数
func_LogMessage(){

    # 変数定義
    LOG_LV_I="[INFO]"
    LOG_LV_E="[ERROR]"
    LOG_DATE="["`date +%Y-%m-%d" "%H:%M:%S`"]"
    SHELLNAME=`basename $0`

    # 引数定義
    LOG_TYPE=$1
    MSG=$2

    # 開始メッセージ
    if [ ${LOG_TYPE} = "start" ]; then
        MSG="スクリプトを開始します"
        printf "################################################\n"
        printf "%-11s %-9s %-7s %-28s %-13s\n" ${LOG_DATE} ${LOG_LV_I} ${MSG} ${SHELLNAME}
    # 終了メッセージ
    elif [ ${LOG_TYPE} = "end" ]; then
        MSG="スクリプトを終了します"
        printf "%-11s %-9s %-7s %-28s %-13s\n" ${LOG_DATE} ${LOG_LV_I} ${MSG} ${SHELLNAME}
        printf "################################################\n"
    # 異常終了メッセージ
    elif [ ${LOG_TYPE} = "abend" ]; then
        MSG="スクリプトが異常終了しました"
        printf "%-11s %-9s %-7s %-28s %-13s\n" ${LOG_DATE} ${LOG_LV_I} ${MSG} ${SHELLNAME}
        printf "################################################\n"
    # その他のメッセージ
    else
        printf "%-11s %-9s %-7s %-41s\n" ${LOG_DATE} ${LOG_TYPE} ${MSG}
    fi
} >> ${LOG_FILE}

# 引数確認
func_CheckParameter(){

    # 引数の個数確認
    if [ $# -eq 0 ]; then
        func_LogMessage ${LOG_LV_E} "引数の個数が間違っています"
        exit 1
    fi

    # ターゲットディレクトリ確認
    if [ ! -d ${TARGET_DIR} ] || [ -z ${TARGET_DIR} ]; then
        func_LogMessage ${LOG_LV_E} "第1引数には存在するディレクトリを指定して下さい"
        exit 1
    fi

    # ダミーディレクトリ確認
    if [ ! -d ${DUMMY_DIR} ] || [ -z ${DUMMY_DIR} ]; then
        func_LogMessage ${LOG_LV_I} "第2引数の値が不正です。次の値を使用します。"
        func_LogMessage ${LOG_LV_I} "第2引数の値:${PWD}/dummy_dir"

        # 第2引数の値が不正なとき、代わりの引数を用意
        DUMMY_DIR=${PWD}/dummy_dir
        if [ ! -d ${DUMMY_DIR} ]; then
            mkdir ${DUMMY_DIR}
        else
            func_LogMessage ${LOG_LV_I} "前回実行時の第2引数の値を削除して新しく作成します"
            DIR_SIZE=`du -s ${DUMMY_DIR} | cut -f 1`
            if [ ! ${DIR_SIZE} -eq 0 ]; then
                rm -rf ${DUMMY_DIR}/*
            fi
        fi
    fi
}

# ダミーディレクトリの作成
func_MkdirDir(){

    # NGフラグを初期化
    NG_FLAG=0

    # mkdir実行用の1次ファイル作成
    cd ${TARGET_DIR}
    find . -type d > ${DUMMY_DIR}/mkdir_tmp
    cd ${DUMMY_DIR}

    # 空ディレクトリの作成
    while read MKDIR_DIR
    do
        # MKDIR_DIRが"."だったら次のループへ移る
        if [ ${MKDIR_DIR} = "." ]; then
            continue
        fi

        # ディレクトリがすでに存在したら次のループへ移る
        if [ -d ${MKDIR_DIR} ]; then
            continue
        fi

        mkdir ${MKDIR_DIR}
        # ディレクトリ作成に失敗したら次のループへ移る
        if [ ! $? -eq 0 ]; then
            func_LogMessage ${LOG_LV_E} "ディレクトリの作成に失敗しました。ディレクトリ名:${MKDIR_DIR}"
            NG_FLAG=1
            continue
        fi
    done < ${DUMMY_DIR}/mkdir_tmp

    # mkdir実行用の1次ファイルを削除
    rm -f ${DUMMY_DIR}/mkdir_tmp

    # 戻りMSG
    COMPLETE_MSG="ダミーディレクトリの作成が完了しました"
    MISSTAKE_MSG="ダミーディレクトリの作成が終了しましたが、一部の処理に失敗しました"
}

# ダミーファイルの作成
func_TouchFile(){

    # NGフラグを初期化
    NG_FLAG=0

    # touch実行用の1次ファイル作成
    cd ${TARGET_DIR}
    find . -type f > ${DUMMY_DIR}/touch_tmp
    cd ${DUMMY_DIR}

    # 空ファイルの作成
    while read TOUCH_FILE
    do
        touch ${TOUCH_FILE}
        # touchに失敗したら次のループへ移る
        if [ ! $? -eq 0 ]; then
            func_LogMessage ${LOG_LV_E} "ファイルの作成に失敗しました。ファイル名:${TOUCH_FILE}"
            NG_FLAG=1
            continue
        fi
    done < ${DUMMY_DIR}/touch_tmp

    # touch実行用の1次ファイルを削除
    rm -f ${DUMMY_DIR}/touch_tmp

    # 戻りMSG
    COMPLETE_MSG="ダミーファイルの作成が完了しました"
    MISSTAKE_MSG="ダミーファイルの作成が終了しましたが、一部の処理に失敗しました"
}

# ----------------------------------------------------------------------
# MAIN
# ----------------------------------------------------------------------

# 処理開始
func_LogMessage start

# 引数確認
func_CheckParameter ${TARGET_DIR} ${DUMMY_DIR}
if [ "$?" -eq 1 ]; then
    func_LogMessage abend
    exit 1
fi

# ダミーディレクトリの作成
func_LogMessage ${LOG_LV_I} "ダミーディレクトリの作成を開始します"
func_MkdirDir
if [ ${NG_FLAG} -eq 1 ]; then
    func_LogMessage ${LOG_LV_I} ${MISSTAKE_MSG}
else
    func_LogMessage ${LOG_LV_I} ${COMPLETE_MSG}
fi

# ダミーファイルの作成
func_LogMessage ${LOG_LV_I} "ダミーファイルの作成を開始します"
func_TouchFile
if [ ${NG_FLAG} -eq 1 ]; then
    func_LogMessage ${LOG_LV_I} ${MISSTAKE_MSG}
else
    func_LogMessage ${LOG_LV_I} ${COMPLETE_MSG}
fi

# 初めにいたディレクトリに移動
cd ${PWD}

# 処理終了
func_LogMessage end
最終更新:2014年03月21日 23:25