3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ファイル名の日付を読み取り、特定の日付以降のファイルを削除するbashシェル(AIX用)

Last updated at Posted at 2015-05-25

0.あらすじ

AIX用のシステム構築で、タイトルのようなバッチを作成することに。
処理自体はよくあるロジックなのでそんなに苦労しないかと思いきや
初めてのbashだった上に、
AIXのdateコマンドがアレなせいで非常に苦労した。
次にAIXで同じような事にならないよう、備忘としてアップロード。

1.コード本編

ポイントは前述の通り日付関連。
AIXなのでTZを使ってゴニョゴニョしてます。
その他のロジックはbashなら他の*nixでも
同じような感じになると思われるけど、
当時bash初心者だったので色々汚い可能性大。
ちょくちょく出てくるファイル内で宣言していない変数は
全て共通環境変数から引っ張ってます。


#!/bin/bash
# 機能名:ログファイル削除
# 引数(1):日数
# 引数(2):種類(1:ログ 2:BAD 3:取込データ 4:連携データ)

#ファイル削除メソッド(引数1:取得日付フラグ 引数2:対象フォルダ 引数3:対象拡張子 引数4:日数)
delFile(){
		declare -i FLG
		declare -i FILE_DATE
		declare -i EXPIRE_DATE
        #引数でもらった日数までの時間を出しておく
		PLUS_DATE=`expr 24 \* $4 - 9`
		
		#削除対象日付取得
		if [ $1 -eq 0 ]
		then
          #引数でもらった日数までの時間をJSTに足して強引に日付計算
           #こちらは年月日まで
			NOW_DATE=`TZ=JST+${PLUS_DATE} date +%Y%m%d`
			EXPIRE_DATE=${NOW_DATE}
		elif [ $1 -eq 1 ]
		then
            #上と同じく日付計算
            #こちらは秒まで取得
			NOW_DATE=`TZ=JST+${PLUS_DATE} date +%Y%m%d%H%M%S`
			EXPIRE_DATE=${NOW_DATE}
		fi

        #findで対象フォルダの対象拡張子ファイルを拾ってループ
		find $2 -name "$3"|while read LINE
		do
		#ファイル名日付取得
		TEMP_DATE=`basename ${LINE}`
		
		#日付切り出し
        #日付の形式が日までと秒までの二形式あったので分岐
		if [ $1 -eq 0 ]
		then
			TEMP_DATE=${TEMP_DATE:6:14}
		elif [ $1 -eq 1 ]
		then
			TEMP_DATE=${TEMP_DATE:0:4}${TEMP_DATE:5:2}${TEMP_DATE:8:2}${TEMP_DATE:11:2}${TEMP_DATE:14:2}
		fi
			
		FILE_DATE=${TEMP_DATE%.*}
		
        #数値チェック
		num=`expr ${FILE_DATE} : [0-9]`
		if [[ ! $num -eq 1 ]]
		then
			FLG=1
		else
			FLG=0
		fi
		
        #削除判定
		if [[ "$FLG" -eq 0 && "$FILE_DATE" -ne 0 && "$FILE_DATE" -lt "$EXPIRE_DATE" ]] 
		then
               #削除実行 
			rm -f "${LINE}"
		fi
		done
}

#共通環境変数読み込み
. COMMON.sh

SCRPT_NAME="DEL_FILE.sh"

#ログ出力
${SCRPT_SHLOG} ${SCRPT_NAME} "I" "ファイル削除開始 $1"

#削除対象判断
if [ $2 -eq 1 ]
then
	#ログ削除
	delFile 0 ${SCRPT_LOG} *.log $1
elif [ $2 -eq 2 ]
then
	#BAD削除
	delFile 1 ${SCRPT_LDR}/BAD *.bad $1
elif [ $2 -eq 3 ]
then
	#取込データ削除
	#OKフォルダ(DAT)
	delFile 1 ${SCRPT_LDR}/OK *.DAT $1
	#OKフォルダ(rxd)
	delFile 1 ${SCRPT_LDR}/OK *.rxd $1
	#OKフォルダ(txd)
	delFile 1 ${SCRPT_LDR}/OK *.txd $1
	#NGフォルダ(DAT)
	delFile 1 ${SCRPT_LDR}/NG *.DAT $1
	#NGフォルダ(rxd)
	delFile 1 ${SCRPT_LDR}/NG *.rxd $1
	#NGフォルダ(txd)
	delFile 1 ${SCRPT_LDR}/NG *.txd $1
elif [ $2 -eq 4 ]
then
	#連携データ削除
	#OKフォルダ
	delFile 1 ${SCRPT_BKUP}/RENKEI/OK *.zip $1
	#NGフォルダ
	delFile 1 ${SCRPT_BKUP}/RENKEI/NG *.zip $1
else 
	${SCRPT_SHLOG} ${SCRPT_NAME} "E" "引数2が不正です"
	${SCRPT_SHLOG} ${SCRPT_NAME} "E" "異常終了"
	exit 9
fi

exit 0

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?