Files
gists/tools/libarchivesum.py

35 lines
1.3 KiB
Python

import hashlib
import argparse
import sys
try:
import libarchive
except ImportError:
sys.stderr.write('The libarchive package is missing. Please install libarchive-c first.\n\nsudo apt install python3-libarchive-c\n\n')
sys.exit(1)
parser = argparse.ArgumentParser()
parser.add_argument('infile', nargs="+")
parser.add_argument('-c', '--hashtype', default="md5", choices=hashlib.algorithms_available)
args = parser.parse_args()
def hash_files_in_archive(archive_path):
try:
with libarchive.file_reader(archive_path) as archive:
for entry in archive:
hasher = hashlib.new(args.hashtype)
for block in entry.get_blocks():
hasher.update(block)
print(f'{hasher.hexdigest()} {entry.pathname}')
except AttributeError:
sys.stderr.write("It seems you're using a version of libarchive that doesn't have the 'file_reader' attribute. "
"This script requires 'python-libarchive-c'. Please ensure it's installed.\n")
sys.exit(2)
# Example usage:
for infile in args.infile:
try:
hash_files_in_archive(infile)
except libarchive.exception.ArchiveError as e:
print(f'Failed to open archive file {infile}: {e}\n', file=sys.stderr)