よくありがちな使用済ファイルの移動と、ある一定世代数を保持した後削除するスクリプトです。
サンプルスクリプト
#!/bin/sh
cd `dirname $0`
pwd
#バッチホーム#バッチホーム
BT_HOME="/home/dabada/batch"
FROM_DIR="${BT_HOME}/fromdir"
TO_DIR="${BT_HOME}/todir"
#CSVファイルバックアップ世代数
CSVBKNUM=3
tgtnm="rsv_"
tgtcsv=${FROM_DIR}/${tgtnm}*[0-9].csv
#存在チェック
ls ${tgtcsv} >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "対象のCSVが存在しない ${tgtcsv}"
else
echo "CSVを移動します ${tgtcsv}"
mv ${FROM_DIR}/${tgtnm}*[0-9].csv ${TO_DIR}/.
fi
# バックアップを古いものから削除
count=0
for pathfile in `ls -t ${TO_DIR}/${tgtnm}*[0-9].csv`; do
count=$(expr $count + 1)
if [ ${count} -gt ${CSVBKNUM} ]; then
echo "${pathfile} を削除します"
rm ${pathfile}
fi
done
ls -l ${FROM_DIR}
ls -l ${TO_DIR}
exit
解説
解説1
cd `dirname $0`
スクリプトが存在する相対パスを表す。 当スクリプトをフォルダ指定で起動した場合、実際にスクリプトが存在する場所に移動(cd)してから動作する事になります。
解説2
ls ${tgtcsv} >/dev/null 2>&1
if [ $? -ne 0 ]; then
ファイルの存在確認をlsの結果で判断しています。
解説3
`ls -t ${TO_DIR}/${tgtnm}*[0-9].csv`
ls -t で出力される順番で世代を求めています。