backup.pl 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #!/usr/bin/perl
  2. ##########################################################################
  3. # Athena用データバックアップツール
  4. #
  5. #  Athenaの各種データファイル*.txtをバックアップするツール
  6. #
  7. #-------------------------------------------------------------------------
  8. # 設定方法
  9. #  実行する時のカレントフォルダからのデータへのパス、ファイルのリストを
  10. #  正しく設定します。バックアップ先のフォルダは自動作成されないので、
  11. #  自分で作成しておく必要があります。
  12. #  フォルダの最後の「/」は省略できません。
  13. #
  14. #  フォルダは引数でも指定できます。例>./backup ../save/ ./backup_data/
  15. #  フォルダの最後の「/」は省略できません。
  16. #
  17. #  実行するとバックアップ先のフォルダへ、ファイル名に現在の日付と時刻を
  18. #  つけてファイルをコピーします。
  19. #
  20. # * toolフォルダ内にbackup_dataフォルダを作成し、
  21. #   athena.shの中に「./tool/backup ./save/ ./tool/backup_data/」
  22. # という行を追加すると、athenaを起動するたびにバックアップが取れます
  23. #
  24. # 復元するときは引数に「-r 日付と時刻」を指定します。
  25. #  またその後ろにフォルダを指定することも出来ます
  26. #  例1> ./backup -r 200309191607
  27. #  例2> ./backup -r 200309191607 ../save ./backup_data/
  28. #  この例では2003/09/19の16:07分にバックアップしたデータを復元しています
  29. #
  30. #  復元するとき、Athenaディレクトリにあるデータは *.bak に名前を変更して
  31. #  残しているので、いらない場合は rm *.bak などで消してください。
  32. #
  33. ##########################################################################
  34. $sdir="../save/"; #バックアップ元(Athenaのディレクトリ/save/)
  35. $tdir="./backup_data/"; #バックアップ先
  36. @files=( #ファイルのリスト
  37. "account","athena","storage","party","guild","castle","pet"
  38. );
  39. #-------------------------------設定ここまで-----------------------------
  40. if($ARGV[0]=~/^\-r$/i || $ARGV[0]=~/\-\-(recover|restore)/i){
  41. #復元処理
  42. $file=$ARGV[1];
  43. $sdir=$ARGV[2]||$sdir;
  44. $tdir=$ARGV[3]||$tdir;
  45. &restorecopy($_) foreach @files;
  46. exit(0);
  47. }
  48. #バックアップ処理
  49. $sdir=$ARGV[0]||$sdir;
  50. $tdir=$ARGV[1]||$tdir;
  51. unless( -d $tdir ){
  52. print "$0: \"$tdir\" : No such directory\n";
  53. exit(1);
  54. }
  55. (undef,$min,$hour,$day,$month,$year)=localtime;
  56. $file=sprintf("%04d%02d%02d%02d%02d",
  57. $year+1900, $month+1, $day, $hour, $min );
  58. &backupcopy($_) foreach @files;
  59. exit(0);
  60. sub backupcopy {
  61. my($name)= @_;
  62. system("cp $sdir$name.txt $tdir$name$file.txt");
  63. }
  64. sub restorecopy {
  65. my($name)= @_;
  66. unless( -f "$sdir$name.txt" ){
  67. printf("$0: \"$sdir$name.txt\" not found!\n");
  68. return 0;
  69. }
  70. unless( -f "$tdir$name$file.txt" ){
  71. printf("$0: \"$tdir$name$file.txt\" not found!\n");
  72. return 0;
  73. }
  74. rename "$sdir$name.txt","$sdir$name.bak";
  75. system("cp $tdir$name$file.txt $sdir$name.txt");
  76. }