1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#!/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");
}
|