#!/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"); }