HLTVを圧縮してどっかに移動させる

今思ったらHLTVとか撮らないのであった。後は任せた。


Linuxシェルスクリプトのお勉強がてらに、
デモファイルを圧縮してどこかに移動させるものを作った。
動作チェックなんてしてない。多分動く。
後はこれをcronで定時実行させれば、多少HLTV管理がラクになるんじゃないかなー。
そういえば、cron実行するときにユーザーの権限を指定できるのかな。


シェルスクリプトは計算ができないけど文字列操作はかなり手軽にできていい感じ。

#!/bin/sh

########## 設定 ##########

# ターゲットになるパス
TARGET_DIR="/home/hlds/hlds/cstrike/demo"

# 対象ファイル
TARGET_FILE="*.dem"

# 出力先
OUTPUT_DIR="/home/hlds/hlds/cstrike/demos"

# 対象ファイルサイズの下限と上限
SIZE_MIN=`expr 1024 \* 1024 \* 5`;   # 5MBから
SIZE_MAX=`expr 1024 \* 1024 \* 100`; # 100MBまで

# フラグ
DELETE_ITEM=1    # 圧縮したものは削除する。


########## 処理 ##########

# エラーはNULLへ出力
mkdir $OUTPUT_DIR 2> /dev/null

# 対象ファイルを探す
for file in `ls ${TARGET_DIR}/${TARGET_FILE} 2> /dev/null` ; do
	# ファイルサイズ取得
	SIZE=`wc -c $file | awk '{print $1}'`
	# ファイルサイズが SIZE_MIN < SIZE < SIZE_MAX
	if [ $SIZE -gt $SIZE_MIN ] && [ $SIZE -lt $SIZE_MAX ] ; then
		FILENAME=${file##*/}                     # パスから抜き出したファイル名
		FILENAME_NOEXT=${FILENAME%.*}            # 拡張子なしファイル名
		MAP=${FILENAME_NOEXT##*-}                # マップ名
		DATE=${FILENAME_NOEXT#*-};
		DATE=${DATE%-*}                          # 日付 YYMMDDHHMM
		YEAR=`expr ${DATE:0:2} + 2000`           # 年   YYYY
		MONTH=${DATE:2:2}                        # 月   MM
		DAY=${DATE:4:2}                          # 日   DD
		HOUR=${DATE:6:2}                         # 時   HH
		MIN=${DATE:8:2}                          # 分   MM
		
		# echo "${file} : ${SIZE} : $FILENAME : $DATE : $YEAR : $MONTH : $MAP"; #debug
		
		# 出力する書式
		OUTPUT="${OUTPUT_DIR}/${YEAR}/${YEAR}-${MONTH}-${DAY}_${HOUR}${MIN}_${MAP}.zip"
		
		# エラーはNULLへ出力
		mkdir ${OUTPUT_DIR}/${YEAR} 2> /dev/null
		
		# 圧縮成功 かつ 削除フラグ なら 元ファイル削除
		zip -9 $OUTPUT $file && [ $DELETE_ITEM != 0 ] && rm -f $file;
	fi
done