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