나는 매우 흥미로운 관찰을 했습니다. 이것은 나쁜 표현일 수도 있습니다.
내 사용 사례는 다음과 같습니다
- 폴더를 백업하고 해당 폴더의 파일 세트를 --exclude-from 파일에 추가합니다. 증분 백업(-g 옵션 세트)을 사용하고 있습니다.
- 새 머신에서 tar를 원래 머신과 동일한 위치로 복원합니다. 새 시스템에는 이미 이 위치에 일부 파일이 있습니다. 파일이 있으면 교체/덮어쓰고 싶습니다.
재현 단계
다음과 같이 파일 및 폴더 구조를 만듭니다.
/tmp/src └── etc ├── A.cfg └── config ├── 1.cfg ├── 2.cfg └── 3.cfg
제외 및 포함 파일 만들기
mbp:tarTests jhartman$ cat /tmp/include.cfg /tmp/src/etc/ mbp:tarTests jhartman$ cat /tmp/exclude.cfg /tmp/src/etc/config/*.cfg
프로필 만들기
$ rm -f /tmp/snapshot $ tar -g /tmp/snapshot -cvz -f /tmp/test.tar.gz -X /tmp/exclude.cfg -T /tmp/include.cfg ./tar-1.27/src/tar: /tmp/src/etc: Directory is new ./tar-1.27/src/tar: /tmp/src/etc/config: Directory is new ./tar-1.27/src/tar: Removing leading `/' from member names /tmp/src/etc/ /tmp/src/etc/config/ /tmp/src/etc/A.cfg
새 서버에 대한 보관을 취소합니다. 보관 취소 전 새 서버의 파일:
/tmp/src └── etc ├── A.cfg └── config ├── 3.cfg ├── 4.cfg └── 5.cfg
보관 취소(대상 컴퓨터에서)
$TAR_BASE/src/tar --overwrite --extract --force-local --listed-incremental=/dev/null --file /tmp/test.tar.gz -v -C / tmp/src/etc/ tmp/src/etc/config/ ./tar-1.30/src/tar: Deleting ‘tmp/src/etc/config/4.cfg’ ./tar-1.30/src/tar: Deleting ‘tmp/src/etc/config/5.cfg’ tmp/src/etc/A.cfg
따라서 궁극적으로 해당 폴더의 파일은 다음과 같습니다.
/tmp/src
└── etc
├── A.cfg
└── config
└── 3.cfg
보시다시피 소스 머신에는 4.cfg
없지만 5.cfg
사라졌습니다. 나는 이것이 /tmp/src/etc/config/*.cfg
제외 파일에서의 사용 때문이라고 생각합니다 .
이 동작은 버전에 따라 변경된다는 점을 언급할 가치가 있습니다. 1.30, 1.27, 1.27.1, 1.29 - NOK, 1.25, 1.26, 1.28 - OK(NOK는 파일 메시지에 관심 있는 항목을 제거할 수 있음을 의미합니다).
어떻게 생각하나요?
고마워요, 야릭
업데이트 날짜: 2018-08-21, 20:51
어떤 버전을 실행하든 --list
작업 결과는 동일하며 다음과 같이 표시됩니다.디config
폴더 에서 :
tar --list --incremental --verbose --verbose --file /tmp/test.tar.gz
drwxr-xr-x jhartman/staff 16 2018-08-21 20:44 tmp/src/etc/
Y A.cfg
D config
drwxr-xr-x jhartman/staff 22 2018-08-21 20:44 tmp/src/etc/config/
N 1.cfg
N 2.cfg
N 3.cfg
-rw-r--r-- jhartman/staff 30 2018-08-21 20:44 tmp/src/etc/A.cfg
업데이트 날짜: 21:03
참고로 제가 테스트에 사용한 스크립트는https://github.com/jaroslawhartman/tar-tests환매.
output.txt
자세한 테스트 결과는 참고자료를 참조하세요 .