Можно ли рассчитать контрольную сумму файла при его создании?

1576
jl6

Я создаю большой tarархив, и я хотел бы также создать контрольную сумму архива. Я мог бы достичь этого так:

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

Но файл архива огромен и на медленном носителе, поэтому я бы предпочел, чтобы после его записи не приходилось читать все заново.

Могу ли я построить конвейер, который будет хэшировать файл при его записи? Я подумал, что, возможно, я смогу сделать это с помощью teeутилиты, но она записывает только в файл, а не на стандартный ввод другой команды.

3

1 ответ на вопрос

4
jl6

Отвечая на мой собственный вопрос:

Да, вы можете использовать замену tee и bash:

tar cfz - files | tee >(sha256sum) | cat > archive.tar.gz 
Minor improvements: You probably don't need the "`| cat`" part, you can just write it directly. You also probably want the subcommand (the "`(sha256sum)`" to write somewhere, i.e. `(sha256sum >archive.tar.gz.sha256sum)` MAP 7 лет назад 0
Просто используйте `| тройник archive.tar.gz | sha256sum` тогда. grawity 7 лет назад 2