디스크 공간을 너무 많이 사용하지 않고 tar 아카이브 내에서 파일의 sha1 체크섬을 생성하는 방법

디스크 공간을 너무 많이 사용하지 않고 tar 아카이브 내에서 파일의 sha1 체크섬을 생성하는 방법

간단한 tar 아카이브에 있는 모든 파일의 sha1 체크섬을 목록이나 새 파일로 얻고 싶습니다.

대용량 tar 파일의 압축을 풀기 위해 디스크 공간을 사용할 필요가 없습니다. 파이프가 있고 즉시 sha1을 계산하여 출력을 /dev/null로 보냅니다.

나는 구글링을 많이 하고 파이프로 몇 가지 실험을 했지만 그리 멀리 가지 못했습니다.

백업을 확인하는 데 정말 많은 시간이 절약됩니다.

답변1

너무 쉽게:

tar xvJf myArchive.tar.xz --to-command=sha1sum

결과는 다음과 같습니다.

z/
z/DOCUMENTATION
3c4d9df9bcbd1fb756b1aaba8dd6a2db788a8659 *-
z/getnameenv.sh
1b7f1ef4bbb229e4dc5d280c3c9835d9d061726a *-

또는 다음 명령을 사용하여 "tarsha1.sh"를 만듭니다.

#!/bin/bash

sha1=`sha1sum`
echo -n $sha1 | sed 's/ .*$//'
echo " $TAR_FILENAME"

그런 다음 다음과 같이 사용하십시오.

tar xJf myArchive.tar.xz --to-command=./tarsha1.sh

결과는 다음과 같습니다.

3c4d9df9bcbd1fb756b1aaba8dd6a2db788a8659 z/DOCUMENTATION
1b7f1ef4bbb229e4dc5d280c3c9835d9d061726a z/getnameenv.sh

답변2

이는 Vouze의 답변이 점진적으로 개선되어 스크립트의 출력이 GNU의 일반 출력과 똑같이 보이게 됩니다 *sum.

다음 버전은 tarhash.sh필요한 경우를 대비하여 / /... 의 현재 버전과 동일하게 개행 또는 백슬래시가 포함된 파일 이름을 처리합니다. 또한 합계와 파일 이름 사이의 두 공백(또는 명령을 에서 로 변경하는 경우 단일 공백 ​​합계)도 유지합니다.md5sumsha1sum*sha1sumsha1sum --binary

파일 이름이 동일한 방식으로 정렬되는 한(또는 양쪽을 먼저 정렬하는 경우) sha1sum선호하는 diff 도구를 사용하여 이 스크립트의 출력을 원래 출력과 비교할 수 있습니다.

tarhash.sh:

#!/bin/bash
(echo -n "`sha1sum`" | sed 's/-$//' && echo -n "$TAR_FILENAME") |
sed -z 's/\\/\\\\/g; s/\n/\\n/g; /\\/ s/^/\\/; s/$/\n/;'

용법:

# Note: In this tar invocation, make sure not to specify -v
# (The output comes out wrong if it is included).
tar xJf myArchive.tar.xz --to-command=./tarhash.sh > sha1sums.txt

관련 정보