#commandline #checksum #tail #log

app checkfile

A command line tool that logs the checksum and last 50 lines of each file in a folder

5 stable releases

1.3.0 Sep 19, 2023
1.2.0 Sep 3, 2023
1.1.1 Sep 3, 2023
1.0.0 Aug 31, 2023

#312 in Command line utilities

28 downloads per month

GPL-3.0-or-later

23KB
104 lines

 ╔═╗ ╦ ╦ ╔═╗ ╔═╗ ╦╔═ ╔═╗ ╦ ╦   ╔═╗
    ╠═╣ ║╣  ║   ╠╩╗ ╠╣  ║ ║   ║╣
 ╚═╝ ╩ ╩ ╚═╝ ╚═╝ ╩ ╩ ╚   ╩ ╩═╝ ╚═╝

checkfile badge

A command line tool that logs the checksum and last 50 lines of each file in a folder written in rust

I use this to verify some backblaze log files and to see how things are changing that may cause unwanted safety freezes.

Install

You can install this tool via the crates cargo ecosystem:

λ cargo install checkfile

Usage

You can cd into a folder and just run the tool with its defaults:

λ cd path/to/folder
λ checkfile
The log for 11 files was written successfully to ./checkfile.log
Finished in 1.30ms

This will create a file called checkfile.log that contains the name, checksum and last 50 lines (in reverse order) of each file found in the current directory.

The format of the checkfile.log is as follows:

## NAME ./your_file1.ext
## HASH 54d0aee5a905190551f607309d162ff7d970f845ac646da13469da004d8c8b63
-->
last line
second last line
third last line
[...]
contents of file
<--
## NAME ./your_file2.ext
## HASH 895344059424ed7f5b1946d80c0e2581e30fc2032584db6dc36c608849e6f165
-->
contents of file
[...]
contents of file
<--
## NAME ./your_file3.ext
## HASH 104f62f4e75447518c3de21b9de71e757c0b7d719de77d36e81a024394777a53
-->
contents of file
[...]
contents of file
<--

Scheduling

I use a cron job to schedule checkfile to run every 6 hours and add the log to a folder. If something is wrong with the backblaze backup I can go into that folder and introspect what may have happened.

The checkfile.sh file:

#!/bin/sh

checkfile -o ~/Desktop/logs/checkfile-$(date +%s).log /Library/Backblaze.bzpkg/bzdata/bzbackup/bzdatacenter

And the cron job:

λ crontab -l

0 */6 * * * /bin/sh ~/checkfile.sh >> ~/Desktop/logs/error.log

<PATH>

Type: <path>
Default value: .

Set the directory you would like to run checkfile on.

λ checkfile /path/to/folder

-o, --output <PATH>

Type: <path>
Default value: ./checkfile.log

Set this output file name and path.

λ checkfile -o /path/to/folder/yourfile.log

💡 Note: This will not create non-existing folder so the path has to exist

-l, --line <NUMBER>

Type: <number>
Default value: 50

Set this amount of lines that should be included into the log file for each checked file.

λ checkfile -l 10

-d, --dotfiles

Type: <bool>
Default value: false

Set to include dot files in your log.

λ checkfile -d

💡 Note: If checkfiles encounters a binary file it will try to read it and mark lines it couldn't with [- binary data -]

-r, --reverse

Type: <bool>
Default value: false

Reverse the output lines so they look the same way the files look (mirror what tail does)

λ checkfile -r

The output file without the --reverse flag:

## NAME ./your_file.ext
## HASH 54d0aee5a905190551f607309d162ff7d970f845ac646da13469da004d8c8b63
-->
last line
second last line
third last line
<--

The output file with the --reverse flag:

## NAME ./your_file.ext
## HASH 54d0aee5a905190551f607309d162ff7d970f845ac646da13469da004d8c8b63
-->
third last line
second last line
last line
<--

For comparison, the contents of ./your_file.ext:

third last line
second last line
last line

License

Copyleft (c) 2023 Dominik Wilkowski. Licensed under the GNU GPL-3.0-or-later.

Dependencies

~4–10MB
~83K SLoC