폴더 Documents
와 TAR 파일이 있다고 가정합니다 Documents.tar
. tar 파일에 디렉토리에 있는 동일한 파일이 포함되어 있는지 어떻게 확인할 수 있습니까?
나에게 더 확실한 해결책은 다음과 같습니다.
$ tar xvf Documents.tar -C untarDocs
$ diff -r Documents untarDocs
불행히도 대용량 TAR 파일의 경우 속도가 매우 느립니다. 다른 옵션이 있습니까?
(또는 --diff, --compare)를 사용하면 tar -dvf Documents.tar
파일 시스템에는 있지만 TAR 파일에는 없는 파일을 감지하지 못하기 때문에 작동하지 않습니다. TAR 파일에는 있지만 TAR에는 없는 파일만 감지합니다. 파일. 파일 시스템 예:
$ mkdir new
$ touch new/foo{1..4}
$ tar cvf new.tar new/
$ touch new/bar
$ tar --diff --verbose --file=new.tar #### doesn't detect new/bar #########
$ rm new/foo1
$ tar --diff --verbose --file=new.tar
산출
new/
new/foo2
new/foo3
new/foo4
new/foo1
tar: new/foo1: Warning: Cannot stat: No such file or directory ### works ###
답변1
파일 이름 목록과 디렉터리 이름 목록만 비교하려는 경우에는 이 -d
옵션이 도움이 되지 않습니다 . 대신, find
정렬된 목록을 tar -tf
및저것.
OP의 원래 예에서 가정한 이름부터 시작합니다.
$ tar xvf Documents.tar -C untarDocs
$ diff -r Documents untarDocs
다음은 파일 이름을 구별하기 위해 제안된 스크립트입니다.
#!/bin/sh
MYDIR=$(mktemp -d)
tar tf Documents.tar |sort >$MYDIR/from-tar
find Documents |sort >$MYDIR/from-dir
(cd $MYDIR && diff -r from-tar from-dir)
rm -rf $MYDIR
이는 Documents.tar
동일한 최상위 "Documents" 디렉터리가 포함되어 있다고 가정합니다. 이것이 좋은 가정이 아닌 경우 목록을 필터링하여 최상위 디렉터리의 이름을 제거해야 합니다. 그러나 OP는 이것이 문제가 될 것이라고 나타내지 않았습니다.
그럼에도 불구하고 프로그램이 어떤 순서를 사용할지 tar
보장 할 수 없으므로 목록을 정렬해야 합니다 .find
나는 사용했다mktemp
OP가 GNU tar(-d
옵션), 이는 Linux에서 가능합니다.
물론 참조할 POSIX tar는 없습니다 -d
. 공원차이도 없습니다.
답변2
표준 tar 아카이브에서는 이것이 불가능합니다. 이는 표준 tar 아카이브에 디렉토리 내용 목록이 포함되어 있지 않기 때문입니다.
star
증분 백업을 아카이브하는 데 필요한 모든 것을 star에 알릴 때 발생하는 향상된 기능을 통해 다음과 같이 작동합니다.
1)star -c -dump -C somedir . > /tmp/tarfile
2)star -diff -vv -C comparedir < /tmp/tarfile
이 옵션을 사용하면 비교되는 메타데이터의 양을 줄일 수 있습니다 diffopts=
. 매뉴얼 페이지를 참조하세요.