루트 디렉터리와 루트 하위 디렉터리의 파일 변경 사항을 확인하고 새 파일에 추가하는 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 dir2
dir2
dir1
--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`