디렉토리에 TAR 아카이브와 동일한 파일이 포함되어 있는지 확인하는 방법은 무엇입니까?

디렉토리에 TAR 아카이브와 동일한 파일이 포함되어 있는지 확인하는 방법은 무엇입니까?

폴더 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

나는 사용했다mktempOP가 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=. 매뉴얼 페이지를 참조하세요.

관련 정보