diff options
Diffstat (limited to 'util/backup/backupgem.c')
-rw-r--r-- | util/backup/backupgem.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/util/backup/backupgem.c b/util/backup/backupgem.c new file mode 100644 index 0000000..bcf49ec --- /dev/null +++ b/util/backup/backupgem.c @@ -0,0 +1,77 @@ +/*-------------------------------------------------------*/ +/* util/backupgem.c ( NTHU MapleBBS Ver 3.10 ) */ +/*-------------------------------------------------------*/ +/* target : 備份所有精華區資料 */ +/* create : 01/10/19 */ +/* update : / / */ +/* author : itoc.bbs@bbs.tnfsh.tn.edu.tw */ +/*-------------------------------------------------------*/ + + +#include "bbs.h" + + +int +main() +{ + struct dirent *de; + DIR *dirp; + char *ptr; + char bakpath[128], cmd[256]; + time_t now; + struct tm *ptime; + + if (chdir(BBSHOME "/gem") || !(dirp = opendir("."))) + exit(-1); + + /* 建立備份路徑目錄 */ + time(&now); + ptime = localtime(&now); + sprintf(bakpath, "%s/gem%02d%02d%02d", BAKPATH, ptime->tm_year % 100, ptime->tm_mon + 1, ptime->tm_mday); + mkdir(bakpath, 0755); + + sprintf(cmd, "cp %s %s/", FN_DIR, bakpath); + system(cmd); + + /* 把 0~9 @ A~V 分別壓縮成一個壓縮檔 */ + while (de = readdir(dirp)) + { + ptr = de->d_name; + + /* 看板的精華區另外備份 */ + if (!strcmp(ptr, "brd")) + continue; + + if (ptr[0] > ' ' && ptr[0] != '.') + { + sprintf(cmd, "tar cfz %s/%s.tgz %s", bakpath, ptr, ptr); + system(cmd); + } + } + closedir(dirp); + + + /* 備份看板 */ + + if (chdir(BBSHOME "/gem/brd") || !(dirp = opendir("."))) + exit(-1); + + /* 建立備份路徑目錄 */ + sprintf(bakpath, "%s/brd", bakpath); + mkdir(bakpath, 0755); + + /* 把各看板分別壓縮成一個壓縮檔 */ + while (de = readdir(dirp)) + { + ptr = de->d_name; + + if (ptr[0] > ' ' && ptr[0] != '.') + { + sprintf(cmd, "tar cfz %s/%s.tgz %s", bakpath, ptr, ptr); + system(cmd); + } + } + closedir(dirp); + + exit(0); +} |