ファイル名をローテートするプログラムがほしいときがあります。
あるファイルの名前に数字をつけて、ある数分だけ残したいことがあります。バックアップファイルを自動で3世代残したいときなどに使います。loglotateコマンドを使えばいいのですが、それほど難しいプログラムではないので、自作してもいいでしょう。
sample.txtについて、次のようにコマンドを実行すると、sample.txt.1という名前になります。
その後、再度sample.txtをおいてから、同じコマンドを実行すると、sample.txt.1が sample.txt.2,になり、sample.txtはsample.txt.1となります。このようにして、ファイルの履歴を残す事ができます。NUMに指定した数分だけ残し、それより前のものは削除しています。
実装をみた方が動作はわかるでしょう。Linux bashで動作確認をしています。
#!/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