일부 하위 디렉터리를 생략하고 디렉터리에서 .tar.gz를 생성하고 새 파일 또는 변경된 파일만 추가

일부 하위 디렉터리를 생략하고 디렉터리에서 .tar.gz를 생성하고 새 파일 또는 변경된 파일만 추가

루트 디렉터리와 루트 하위 디렉터리의 파일 변경 사항을 확인하고 새 파일에 추가하는 bash스크립트 등의 스크립트 를 만들어야 합니다 . tar.gz 파일 이름 끝에는 .sh생성 날짜(예: )가 포함되어야 합니다 . monitor-17.06.2013.tar.gz나는 그것을 했다:

tar -zcvf /home/monitor.tar.gz /var/www/html/monitor --exclude /var/www/html/monitor/cache /var/www/html/monitor/log

작동하지만 디렉터리가 /var/www/html/monitor/log생략되지 않고 파일 이름에 날짜가 포함되지 않으며 새 파일을 추가하거나 파일을 변경하는 섹션이 누락되었습니다. 그 방법을 모르기 때문입니다.

편집: 내 요구 사항을 명확히 하기 위해 좋아, 여기 사용자들의 일부 의견으로 인해 내가 찾고 있는 것을 남겨두도록 노력하겠습니다.

Day1: 2013-06-15
Directory: /var/www/html/monitor
Backup File Created: monitor-2013-06-15.tar.gz (contains all the content of /monitor folder)

Day2: 2013-06-16
Directory: /var/www/html/monitor
Files Changed: 
  /var/www/html/monitor/file1.php
  /var/www/html/monitor/log/file2.php
  /var/www/html/monitor/web/file3.php

Files Added: 
  /var/www/html/monitor/index.php
Backup File Created: monitor-2013-06-16.tar.gz (contains **only** the files index.php, file1.php, file2.php and file3.php)

Day3: 2013-06-17
Directory: /var/www/html/monitor
Files Changed: 
  /var/www/html/monitor/index.php
Backup File Created: monitor-2013-06-17.tar.gz (contains **only** the file index.php)

첫 번째 백업에는 항상 모든 것이 포함되지만 나머지 백업에는 수정된 최신 파일만 포함되어야 하며 그 외의 파일은 포함되지 않습니다.

답변1

파일 이름에 현재 날짜를 삽입하려면 date다음을 입력하십시오 .명령 대체.

tar -czf monitor-$(date -d %Y-%m-%d).tar.gz …

나는 다음과 같은 이유로 날짜에 연-월-일 형식을 사용하는 것을 권장합니다. 사전 순서는 미국의 월-일-년과 나머지 국가의 일-월-년 사이에 혼동의 위험이 없습니다. 세계; 이것은 ISO 표준입니다.

여러 디렉터리를 제외하려면 각 디렉터리에 대해 반복해야 합니다 . 아카이브에 포함될 경로 를 --exclude작성하는 경우 .tar -czf monitor.tar.gz --exclude dir1 dir2dir2dir1--exclude

tar -czf monitor-$(date -d %Y-%m-%d).tar.gz --exclude /var/www/html/monitor/cache /var/www/html/monitor/log /var/www/html/monitor

특정 날짜 이후에 수정된 파일을 저장하려면 이 --newer옵션을 전달하세요. 참조 파일이나 날짜를 지정할 수 있습니다. 타임스탬프 파일을 사용하는 것이 훨씬 더 안정적입니다. 각 백업 전에 파일을 생성하고 이전 백업의 타임스탬프 파일을 다음 백업에 대한 참조로 사용합니다.

touch monitor-backup.timestamp.new
tar … --newer=./monitor-backup.timestamp
mv -f monitor-backup.timestamp.new monitor-backup.timestamp

귀하는 자신만의 증분 백업 시스템을 운영하고 있는 것으로 보입니다. 이를 안정적으로 수행하는 것은 매우 어렵습니다. 다음과 같은 기존 백업 애플리케이션을 사용하는 것이 좋습니다.이중성.

답변2

생략된 디렉터리의 경우 --exclude각 디렉터리에 대해 해당 옵션을 사용해야 하지만 그 이후의 모든 항목을 제외한다는 의미는 아닙니다. 일부 명령은 쉼표로 구분된 값을 사용하지만 전부는 아닙니다.

tar -zcvf /home/monitor.tar.gz /var/www/html/monitor --exclude /var/www/html/monitor/cache --exclude /var/www/html/monitor/log

날짜 부분을 추가하는 경우 찾고 있는 내용에 대한 설명을 바탕으로 다음을 사용할 수 있다고 생각합니다.

-d, --diff, --compare
      find differences between archive and file system

편집: 이 작업을 수행하는 간단한 스크립트는 다음과 같습니다. 오류 검사 등은 없지만 시작입니다.

NEW_FILE="monitor.`date +%d.%m.%Y`.tar.gz"
PREV_FILE={However you want to find this}

tar cf $NEW_FILE `tar --diff -f $PREV_FILE  | awk --field-separator=: '{print $1}' | uniq`

관련 정보