ツール名 | シェル名 | 内容 |
ファイル構成のダミー作成 | 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