ファイルローテート

ファイル名をローテートするプログラムがほしいときがあります。

あるファイルの名前に数字をつけて、ある数分だけ残したいことがあります。バックアップファイルを自動で3世代残したいときなどに使います。loglotateコマンドを使えばいいのですが、それほど難しいプログラムではないので、自作してもいいでしょう。

sample.txtについて、次のようにコマンドを実行すると、sample.txt.1という名前になります。

NUM=3 file_lotate.sh sample.txt

その後、再度sample.txtをおいてから、同じコマンドを実行すると、sample.txt.1が sample.txt.2,になり、sample.txtはsample.txt.1となります。このようにして、ファイルの履歴を残す事ができます。NUMに指定した数分だけ残し、それより前のものは削除しています。

実装をみた方が動作はわかるでしょう。Linux bashで動作確認をしています。

$ cat file_lotate.sh 
#!/bin/sh
if [ -z "$NUM" ]; then
  no="7"
else
  no=$NUM
fi

file_name=$1

cnt=`expr $no - 1`

if [ -e "$file_name.$no" ]; then
  rm $file_name.$no
else
  echo "No file $file_name.$no"
fi

until [ $cnt -eq 0 ];
do        
  if [ -e "$file_name.$cnt" ]; then
    mv $file_name.$cnt $file_name.$no
  else
    echo "No file $file_name.$cnt"
  fi
  cnt=`expr $cnt - 1`
  no=`expr $no - 1`
done

if [ -e "$file_name" ]; then
  mv $file_name $file_name.1
else
  echo "No file $file_name"
fi

同じタグの記事: bash
同じタグの記事: shell script
同じカテゴリの記事: Linux
関連書籍: bash