bash

bash 世代の古いファイルから削除

よくありがちな使用済ファイルの移動と、ある一定世代数を保持した後削除するスクリプトです。

サンプルスクリプト

#!/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 で出力される順番で世代を求めています。
スポンサーリンク