summaryrefslogtreecommitdiffstats
path: root/util/backup/backupgem.c
blob: bcf49ec69c066598f20592aa9103e7666cc2e95d (plain) (blame)
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
/*-------------------------------------------------------*/
/* 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);
}