tar 파일의 해시 파일

tar 파일의 해시 파일

*.tar비슷한 내용의 파일이 두 개 있습니다 . 어떤 파일이 동일한지 확인하고 싶습니다. 많은 파일이 크기 때문에 해시를 비교하려면 각 tar에서 모든 파일을 추출하고 해시를 계산해야 합니다. 파일을 추출하지 않고도 tar에 있는 파일을 해시하는 방법이 있습니까? 두 파일의 파일을 비교하는 또 다른 방법이 있습니까 *.tar?

답변1

GNU tar인 경우 다음을 실행하십시오.

tar -xf file1.tar --to-command=file-stats-from-tar

file-stats-from-tar는 다음 위치에 있습니다 $PATH.

#!/bin/bash

md5=`md5sum`;
md5=${md5%% *}

printf "%s\t%s\n" $md5 "$TAR_FILENAME"

md5sum필요한 경우 변경하십시오 .

이 모든 것이 단일 패스로 수행됩니다.

작동 방식은 --to-command옵션이 tar에게 보내라고 지시하는 것입니다.파일을 여러 환경 변수 세트와 함께 사용자가 지정한 명령에 별도로 저장합니다( TAR_FILENAME여기서만 사용함).

답변2

더 효율적인 방법이 있을 수 있지만 저는 몇 분 안에 이 방법을 생각해낼 수 있었습니다.

tar tf test.tar | while read x ; do echo "$(tar xfO test.tar ${x} | md5sum) ${x}" ; done

첫 번째는 tar tf아카이브의 파일을 나열한 다음 while read xbash 루프로 전달됩니다. 각 파일 이름에 대해 tar xfO test.tar ${x} | md5summd5sum을 선호하는 해시 도구로 바꿀 수 있습니다. 의 이상한 용도는 echo $() ${x}왼쪽에 값이 있고 오른쪽에 파일 이름이 있는 일반 해시 출력과 비슷하게 출력을 유지하는 것입니다. 그렇지 않으면 모든 파일의 해시만 제공할 뿐 이름은 제공하지 않으므로 어느 파일이 어디로 갔는지 알 수 없습니다. 그럼에도 불구하고 -출력에는 일반적으로 존재하지 않는 추가 열이 있습니다 . colrm파이프라인에서 명령을 사용하여 쉽게 제거할 수 있습니다 .

n개의 파일이 있는 경우 tar 파일을 n+1번 통과해야 하기 때문에 이는 가장 효율적이지 않을 수 있지만 처음으로 읽은 후에 tar 내용이 캐시되기를 바랍니다.

관련 정보