Contents

조회 수 10597 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
#!/usr/bin/perl

#################################################################################################
##                                                                                             ##
##  제  작 : 후리자 (2003년 4월 3일) maritpe@hotmail.com                                       ##
##  파일명 : fullbackup.pl                                                                     ##
##                                                                                             ##
##  풀백업을 쉽게 하게 해준다                                                                  ##
##                                                                                             ##
#################################################################################################

  $computer = "cmd"; # 백업파일 앞에 붙는 글자
  $tgzpath = "/backup/"; # 백업한 파일을 저장할 경로 (뒤에 슬래쉬 꼭!)

  $tarfile = "/bin/tar"; # tar 파일의 경로
  $rmfile = "/bin/rm"; # rm 파일의 경로

  # 백업할 디렉토리 목록
  @backupdir = (
                [ "/home/users/js/",          "" ],
                [ "/home/users/simi/",        "" ],
                [ "/home/users/stormbr/",     "" ],
                [ "/home/users/tohlead/",     "" ],
                [ "/home/users/greesp/",      "" ],
                [ "/home/staff/hooriza/",     "--exclude=/home/staff/hooriza/storage" ],
                [ "/home/staff/lodoss/",      "" ],
                [ "/home/staff/dawnsea2/",    "" ],
                [ "/htdocs/",                 "" ],
                [ "/cmd/club/",               "--exclude=/cmd/club/storage" ]
               );

#################################################################################################

# 명령어 실행하기
sub execCommand($)
{
  my($command) = @_;

  print "명령실행 : $command\n";
  $result = `$command`;
  
  if ($result)
  {
    print "실행결과 : $result\n";
  }
}

# 파일내용 읽기
sub getFileData($)
{
  my($filename) = @_;
  $retval = `cat $filename`;
  $retval =~ s/\n//gi;
  
  return $retval;
}

# 파일내용 쓰기
sub setFileData($$)
{
  my($filename, $data) = @_;
  `echo $data > $filename`;
}

# 현재 날짜 얻기
sub getCurrentDate()
{
  $retval = `date +%Y%m%d`;
  $retval =~ s/\n//gi;

  return $retval;
}

if ($#ARGV != 0)
{
  die "오류 : 인자로 full 또는 incr 가 들어가야합니다.\n";
}

$backuptype = shift(@ARGV);

if ($backuptype ne "full" && $backuptype ne "incr")
{
  die "오류 : 인자로 full 또는 incr 가 들어가야합니다.\n";
}

$lastFBdatefile = $tgzpath.$computer."_fullbackup_lastdate"; # 마지막으로 full 백업이 된 날짜 파일
$lastIBdatefile = $tgzpath.$computer."_incrbackup_lastdate"; # 마지막으로 incr 백업이 된 날짜 파일

$today = getCurrentDate();
$lastFBdate = getFileData($lastFBdatefile); # 마지막으로 full 백업 된 날짜 얻기
$lastIBdate = getFileData($lastIBdatefile); # 마지막으로 incr 백업 된 날짜 얻기

# fullbackup 디렉토리 만들기
execCommand("mkdir ".$tgzpath."fullbackup");

# incrbackup 디렉토리 만들기
execCommand("mkdir ".$tgzpath."incrbackup");

foreach my $arrayret(@backupdir)  
{
  # 배열 값 받아오기
  $destdir = @$arrayret[0];
  $option = @$arrayret[1];
  
  # 슬래쉬를 언더바로 바꾼 대상경로
  $udestdir = $destdir;
  $udestdir =~ s/\//_/gi;

  # 기존의 백업파일 삭제하기
  if ($backuptype eq "full")
  {
    if ($lastFBdate ne "")
    {
      print "기존의 압축파일을 삭제합니다\n";
      
      # 지울압축파일의 경로 설정
      $deltgzfile = $tgzpath."fullbackup/".$computer.$lastFBdate.$udestdir.".tgz";
      
      # 삭제하기
      execCommand("$rmfile -f $deltgzfile");
    }

    print "새로운 압축파일을 만듭니다\n";
  
    # 압축파일의 경로 설정
    $tgzfile = $tgzpath."fullbackup/".$computer.$today.$udestdir.".tgz";
  
    # 압축하기
    execCommand("$tarfile -czvf $tgzfile $destdir $option");
  }
  else
  {
    if ($lastFBdate > $lastIBdate) # full 백업한 이후로 incr 백업을 한번도 안 했으면
    {
      print "기존의 압축파일을 삭제합니다\n";
      
      # 지울압축파일의 경로 설정
      $deltgzfile = $tgzpath."incrbackup/".$computer."????????".$udestdir.".tgz";
      
      # 삭제하기
      execCommand("$rmfile -f $deltgzfile");
    }

    print "새로운 압축파일을 만듭니다\n";
  
    # 압축파일의 경로 설정
    $tgzfile = $tgzpath."incrbackup/".$computer.$today.$udestdir.".tgz";
  
    # 압축하기
    execCommand("$tarfile --newer '$lastIBdate' -zcf $tgzfile $destdir $option");
  }
}

if ($backuptype eq "full")
{
  # 마지막으로 full 백업 된 날짜 수정
  setFileData($lastFBdatefile, $today);
}
else
{
  # 마지막으로 incr 백업 된 날짜 수정
  setFileData($lastIBdatefile, $today);
}


?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
70 System/OS [mac] OS X 엘 캐피탄에서 Soudflower 사용하기 2 file hooni 2016.10.03 874
69 System/OS [mac] OS X 요세미티 사용자가 많이 겪는 버그와 몇몇 불편사항 file hooni 2015.01.04 1514
68 System/OS [mac] OSX(맥) 단축키 설명 ㅎㅎ file hooni 2013.04.23 29561
67 System/OS [mac] SVN 1.8 업데이트 방법 hooni 2013.09.24 14559
66 System/OS [mac] VirtualBox 실행 스크립트와 bash_profile 설정 file hooni 2020.07.08 951
65 System/OS [mac] 맥(OSX)에서 NTFS, 윈도우에서 HFS+ 사용하기 file hooni 2014.03.12 5113
64 System/OS [mac] 맥(OSX)에서 root 패스워드 설정하기 hooni 2013.04.23 22416
63 System/OS [mac] 맥OSX에서 NTFS 쓰기 기능 활성화 hooni 2014.03.12 4282
62 System/OS [mac] 맥에서 APM(apache,php,mysql) 구성하기 hooni 2013.04.23 38614
61 System/OS [mac] 맥에서 기본 실행 앱 변경하기 file hooni 2018.03.02 1802
60 System/OS [mac] 맥에서 슬립(잠자기) 모드 진입을 막는 방법~ hooni 2013.10.10 30876
59 System/OS [mac] 컨텍스트(Context) 메뉴 "다음으로 열기" 내용 정리 hooni 2013.07.10 18797
Board Pagination Prev 1 ... 7 8 9 10 11 12 13 14 15 16 17 Next
/ 17