Crate quickdash

source ·
Expand description

Tool for making/verifying hashes.

Library doc

The library it’s self is used in this project as well due it contains all needed functions.

Data flow

Hash verification

|> create_hashes()
|> load_hashes()
|> compare_hashes()
|> write_hash_comparison_results()

Hash creation

|> create_hashes()
|> write_hashes()

Executable manpage

Exit values and possible errors:

1   - option parsing error
2   - hash lengths differ between selected and saved
3   - failed to parse hashes file
N+3 - N files didn't match




This is a utility for making/checking hashes with blazing-fast speed. All most well-known hash functions are supported, like MD5, SHA1, SHA2 etc. It’s licensed under Apache-2.0 License.


-a –algorithm <algorithm>

Quite simple, select the hash you want. Case-insensitive.

Supported algorithms: SHA{1,2-,3-{224,256,384,512}, CRC32, MD5, BLAKE{2B,2S,3}, XXH3, XXHASH64

-c –create

A very simple command. What it does, it creates hashes.
If user didn't specified the name it will use, the name of folder with `.hash` extension.

And will also fail if the output file exists already and the command `--force` is not presented.

Only with `--verify`. Overrides `--verify`.

-v –verify

Verify directory hashes. Used by default.

Only with `--create`. Overrides `--create`.

-d –depth <depth>

Set max recursion depth to `depth`. Default: 0.

Only with `--recursive`. Overrides `--recursive`.

-r –recursive

Set max recursion depth to infinity. By default it doesn't recurse.

Only with `--depth`. Overrides `--depth`.


Recurse down symlinks. Default.


Don't recurse down symlinks.

-i –ignore <filename[,filename2][,filename3][,filenameN]…>…

Add filename(s) to ignored files list. Default: not used.

The program marks the files that will be ignored. The specified ignored files will not come to the output file.

Can be used multiple times.


Rewrite the output file in `--create` mode.

-j –jobs [jobs]

Amount of threads used for hashing. Default: # of CPU threads

One thread can hash one file at a time, potentially speeding up hashing
up to `jobs` times.

No/empty value: # of CPU threads. value = 0: maximum, of u8 (255)


Directory to create/verify hash for. By default is current workdir.


quickdash [-v] [-f infile]

Verify the current directory using the saved hashes.

`-v` is not necessary as it's the default.

*infile* defaults to "`DIRECTORY`.hash"

Example output:
  File added: "file_that_hasnt_been_before"
  File removed: "file_that_was_originally_here_before_but_not_now"
  File ignored: "file_specified_with_ignore_now_or_during_creation"

  File "file_that_did_not_change" matches
  File "changed_file" doesn't match
    Was: foo
    Is : bar

examples -c [-f outfile] [--force]

Create hashes of the current directory tree for later verification.

*outfile* defaults to "`DIRECTORY`.hash".

Use `--force` to override *outfile*.

*outfile* contents:
  F013BF0B163785CBB3BE52DE981E069E2B64E1CAC863815AC7BEED63E1734BAE  Cargo.toml
  E84E380AEBDA3D98E96267201D61784C3D6FFB128C4D669E6C1D994C7D7BF32B  Cross.toml


  • Main functions doing actual work.
  • Module containing various utility functions




  • Hash the specified file using the specified hashing algorithm.
  • Hash the specified byte stream using the specified hashing algorithm.
  • Create a hash string out of its raw bytes.