#!/bin/zsh # tarhash [--HASH] ARCHIVES... - hash files in archives without extracting HASH=sha1 case "$1" in --md5|--rmd160|--sha1|--sha256|--sha384|--sha512) HASH=${1#--}; shift esac for archive; do bsdtar -cf - --format mtree --options mtree:$HASH @- <$archive | while read -r -A line; do [[ $line[-1] == ${HASH}digest=* ]] && print "${line[-1]#${HASH}digest=} ${(g:o:)line[1]}" done done