간단한 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
필요한 경우를 대비하여 / /... 의 현재 버전과 동일하게 개행 또는 백슬래시가 포함된 파일 이름을 처리합니다. 또한 합계와 파일 이름 사이의 두 공백(또는 명령을 에서 로 변경하는 경우 단일 공백 합계)도 유지합니다.md5sum
sha1sum
*
sha1sum
sha1sum --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