Hash of a Directory
In linux it’s easy and straightforward to find checksum of a file:
$ sha256sum /path/to/file/filename
3c6f25f33bf06d7f9e5f9bb0232a2b1a694acdaa9d27c9a0dffefb827a00773e filename
Finding a directoy’s hashsum with bash is a little bit tricky1 though:
$ find /somepath -type f -print0 | sort -z | xargs -0 sha256sum | sha256sum
Explanation of flags
find /somepath -type f
means find all files in/somepath
output
hugo/metrics/metrics.go
hugo/metrics/metrics_test.go
hugo/hugofs/fileinfo.go
hugo/hugofs/filter_fs.go
hugo/hugofs/fs.go
hugo/hugofs/createcounting_fs.go
hugo/hugofs/rootmapping_fs_test.go
hugo/hugofs/decorators.go
hugo/hugofs/hashing_fs_test.go
hugo/hugofs/stacktracer_fs.go
hugo/hugofs/slice_fs.go
hugo/hugofs/filter_fs_test.go
hugo/hugofs/language_composite_fs.go
hugo/hugofs/files/classifier_test.go
hugo/hugofs/files/classifier.go
hugo/hugofs/glob/glob.go
hugo/hugofs/glob/glob_test.go
hugo/hugofs/fs_test.go
hugo/hugofs/hashing_fs.go
hugo/hugofs/nosymlink_test.go
hugo/hugofs/nosymlink_fs.go
hugo/hugofs/glob.go
hugo/hugofs/noop_fs.go
hugo/hugofs/walk_test.go
hugo/hugofs/walk.go
-print0
removes all headheaches from having spaces or special characters in filenames:
output
hugo/metrics/metrics.go./hugo/metrics/metrics_test.go./hugo/hugofs/fileinfo.go./hugo/hugofs/filter_fs.go./hugo/hugofs/fs.go./hugo/hugofs/createcounting_fs.go./hugo/hugofs/rootmapping_fs_test.go./hugo/hugofs/decorators.go./hugo/hugofs/hashing_fs_test.go./hugo/hugofs/stacktracer_fs.go./hugo/hugofs/slice_fs.go./hugo/hugofs/filter_fs_test.go./hugo/hugofs/language_composite_fs.go./hugo/hugofs/files/classifier_test.go./hugo/hugofs/files/classifier.go./hugo/hugofs/glob/glob.go./hugo/hugofs/glob/glob_test.go./hugo/hugofs/fs_test.go./hugo/hugofs/hashing_fs.go./hugo/hugofs/nosymlink_test.go./hugo/hugofs/nosymlink_fs.go./hugo/hugofs/glob.go./hugo/hugofs/noop_fs.go./hugo/hugofs/walk_test.go./hugo/hugofs/walk.go
sort -z
: we are sorting with-z
flag.-z
or--zero-terminated
means: line delimiter is NUL, not newlinewith
xargs -0 sha256sum
we interpreted-print0
output with-0 (--null)
flag and executesha256sum
command:
output
73185483c784e76a7bfb91295fad4859101304efc0757a78e913cd2ebbe16cd4 hugo/benchbep.sh
1c8cae727c7518c6d92eb62d56630af23d36b4c3743271f2040bf82befaafaa4 hugo/bench.sh
8a0b3d50f7630eea822d0ac6dc12f283abc55c80328d43323861bdb77a062a77 hugo/benchSite.sh
bebc05f6c2511a964a61ec1d022ddd2caaf2755f9e9ca158006f1a545044d032 hugo/bepdock.sh
2e2b6c7fc1ff73e17eae698224b72acbf27d3c6db8378a069824d870638d5b96 hugo/bufferpool/bufpool.go
3b035bf75ef31fc7bc0115bce5549fcb4d0071191843f8be3528b993a1959d8d hugo/bufferpool/bufpool_test.go
8ef49137a2d9671d6f57a8452a199cb14ad47654dafdf88ad0016f957cb4e3d3 hugo/cache/filecache/filecache_config.go
d696c1f65b2b30307bf06d1dfedceb4c147352c95874e8685c994065392d074a hugo/cache/filecache/filecache_config_test.go
4b6f2148aad5f29bfa275e0ed40e16c2789e0fcaf436b7fc64cf540c14d17895 hugo/cache/filecache/filecache.go
c37ca9b578f07ee38642b98775a1b622f082e20d3bad79a1f09adbaa156e8ad3 hugo/cache/filecache/filecache_pruner.go
431f3aa42fd296a7163bcbcaf4ada17e00d9f8940a5ebd8f8f20f79529189c52 hugo/cache/filecache/filecache_pruner_test.go
b1135bb572e330a1b2619a8eafa81e5f3b1d7e1c2c2d7e1d7ae266e1f7543f9f hugo/cache/filecache/filecache_test.go
b78985d510c1d617daffe48c571310ef82c0aaa31bd28c15ce13602baf961ef1 hugo/cache/namedmemcache/named_cache.go
645d56dca7355b2bcf5c2df322810c214db8bf5c44359c81e70cced2fbce85c0 hugo/cache/namedmemcache/named_cache_test.go
bb3f9169a05369de2dc4571902e536b0a11fced490e48fb22fbc01363c2b553e hugo/.circleci/config.yml
3b7b8ba156730e0f16c1fb64f3758c92c7e82c00c6cb5e43ed811b243c455ff8 hugo/codegen/methods2_test.go
43fdf285083f13146b307699ae0eb4b5e5d85ce354a19fa69af9c9f8fb644720 hugo/codegen/methods.go
23d780ad3a8725a514e03a51fb10e654023cacb5f8f27af96f81e6feecf469cc hugo/codegen/methods_test.go
5cd6a0e2a7084ce2c388d22a4db605d72a3814100570aa43a3b48c7e8d13b560 hugo/commands/check_darwin.go
8d2a6c0c456b8fad57c3e2c8e4155b7085ad63bf85b6635e1e27706d8ea931e5 hugo/commands/check.go
44e17d4657ac1d19b33392641473b2b13f1347073b3bb610ce638fc050f815a5 hugo/commands/commandeer.go
bed981879e1daf007e49a9882a0276527980366694db09e3c3e3342541a5a723 hugo/commands/commands.go
5b97aaecb4c8cb9f08c32e89b0f22bf38ff5c7b6b37b2ced1668472f436c5cd1 hugo/commands/commands_test.go
e1f49c774c5d1d76f52049e3094c6f264574b18b780fa06a89b77680a783881b hugo/commands/config.go
15000952b0fd581b9056b7cea4ccd1262ffda232685b44b521088298c4ac5ad7 hugo/commands/convert.go
- and with the last pipe
| sha256sum
we hashing all hash values and filenames together:
48b2ca42fe22bf180d25248396df431408a74344b85539fc23c55f0c5fcc356e -
All done!
Subscribe
Read Related