5

I am creating a large tar archive and I would like to create the checksum of the archive too. I could achieve it like this:

$ tar cfz archive.tar.gz files
$ sha256sum archive.tar.gz > archive.tar.gz.sha256sum

But the archive file is huge and on slow media, so I'd prefer not to have to read it all in again after writing it out.

Can I build a pipeline that will hash the file as it writes it? I thought maybe I could do this with the tee utility, but that only writes to a file, not to the standard input of another command.

jl6
  • 1,205

1 Answers1

6

Answering my own question:

Yes, you can use tee and bash process substitution:

tar cfz - files | tee >(sha256sum) | cat > archive.tar.gz
jl6
  • 1,205