#!/usr/bin/perl ########################################################################## # Athena用データバックアップツール # # Athenaの各種データファイル*.txtをバックアップするツール # #------------------------------------------------------------------------- # 設定方法 # 実行する時のカレントフォルダからのデータへのパス、ファイルのリストを # 正しく設定します。バックアップ先のフォルダは自動作成されないので、 # 自分で作成しておく必要があります。 # フォルダの最後の「/」は省略できません。 # # フォルダは引数でも指定できます。例>./backup ../save/ ./backup_data/ # フォルダの最後の「/」は省略できません。 # # 実行するとバックアップ先のフォルダへ、ファイル名に現在の日付と時刻を # つけてファイルをコピーします。 # # * toolフォルダ内にbackup_dataフォルダを作成し、 # athena.shの中に「./tool/backup ./save/ ./tool/backup_data/」 # という行を追加すると、athenaを起動するたびにバックアップが取れます # # 復元するときは引数に「-r 日付と時刻」を指定します。 # またその後ろにフォルダを指定することも出来ます # 例1> ./backup -r 200309191607 # 例2> ./backup -r 200309191607 ../save ./backup_data/ # この例では2003/09/19の16:07分にバックアップしたデータを復元しています # # 復元するとき、Athenaディレクトリにあるデータは *.bak に名前を変更して # 残しているので、いらない場合は rm *.bak などで消してください。 # ########################################################################## $sdir="../save/"; #バックアップ元(Athenaのディレクトリ/save/) $tdir="./backup_data/"; #バックアップ先 @files=( #ファイルのリスト "account","athena","storage","party","guild","castle","pet" ); #-------------------------------設定ここまで----------------------------- if($ARGV[0]=~/^\-r$/i || $ARGV[0]=~/\-\-(recover|restore)/i){ #復元処理 $file=$ARGV[1]; $sdir=$ARGV[2]||$sdir; $tdir=$ARGV[3]||$tdir; &restorecopy($_) foreach @files; exit(0); } #バックアップ処理 $sdir=$ARGV[0]||$sdir; $tdir=$ARGV[1]||$tdir; unless( -d $tdir ){ print "$0: \"$tdir\" : No such directory\n"; exit(1); } (undef,$min,$hour,$day,$month,$year)=localtime; $file=sprintf("%04d%02d%02d%02d%02d", $year+1900, $month+1, $day, $hour, $min ); &backupcopy($_) foreach @files; exit(0); sub backupcopy { my($name)= @_; system("cp $sdir$name.txt $tdir$name$file.txt"); } sub restorecopy { my($name)= @_; unless( -f "$sdir$name.txt" ){ printf("$0: \"$sdir$name.txt\" not found!\n"); return 0; } unless( -f "$tdir$name$file.txt" ){ printf("$0: \"$tdir$name$file.txt\" not found!\n"); return 0; } rename "$sdir$name.txt","$sdir$name.bak"; system("cp $tdir$name$file.txt $sdir$name.txt"); }