*.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 x
bash 루프로 전달됩니다. 각 파일 이름에 대해 tar xfO test.tar ${x} | md5sum
md5sum을 선호하는 해시 도구로 바꿀 수 있습니다. 의 이상한 용도는 echo $() ${x}
왼쪽에 값이 있고 오른쪽에 파일 이름이 있는 일반 해시 출력과 비슷하게 출력을 유지하는 것입니다. 그렇지 않으면 모든 파일의 해시만 제공할 뿐 이름은 제공하지 않으므로 어느 파일이 어디로 갔는지 알 수 없습니다. 그럼에도 불구하고 -
출력에는 일반적으로 존재하지 않는 추가 열이 있습니다 . colrm
파이프라인에서 명령을 사용하여 쉽게 제거할 수 있습니다 .
n개의 파일이 있는 경우 tar 파일을 n+1번 통과해야 하기 때문에 이는 가장 효율적이지 않을 수 있지만 처음으로 읽은 후에 tar 내용이 캐시되기를 바랍니다.