Restic json output and jq
Restic has the ability to show output in json. Here is how I used it for some CSV type reporting I needed on backup jobs.
Example json output.
# restic -r rclone:s3_phx:/restic-backup backup /root --json | jq -r 'select(.message_type=="summary")'
{
"message_type": "summary",
"files_new": 0,
"files_changed": 0,
"files_unmodified": 761,
"dirs_new": 0,
"dirs_changed": 0,
"dirs_unmodified": 0,
"data_blobs": 0,
"tree_blobs": 0,
"data_added": 0,
"total_files_processed": 761,
"total_bytes_processed": 251861194,
"total_duration": 1.118076434,
"snapshot_id": "09d1a6b9"
}
With @csv filter.
# restic -r rclone:s3_phx:/restic-backup backup /root --json | jq -r 'select(.message_type=="summary") | [.files_new,.files_changed,.files_unmodified,.dirs_new,.dirs_changed,.dirs_unmodified,.data_blobs,.tree_blobs,.data_added,.total_files_processed,.total_bytes_processed,.total_duration,.snapshot_id] | @csv'
0,0,764,0,0,0,0,0,0,764,251918381,1.037043765,"3a55b3b3"
I needed double quotes and could not figure out how to tell @csv filter to quote so below workaround for now. This was then usable in my bash script.
# restic -r rclone:s3_phx:/restic-backup backup /root --json | jq -r 'select(.message_type=="summary") | "\"\(.files_new)\",\"\(.files_changed)\",\"\(.files_unmodified)\",\"\(.dirs_new)\",\"\(.dirs_changed)\",\"\(.dirs_unmodified)\",\"\(.data_blobs)\",\"\(.tree_blobs)\",\"\(.data_added)\",\"\(.total_files_processed)\",\"\(.total_bytes_processed)\",\"\(.total_duration)\",\"\(.snapshot_id)\""'
"0","3","761","0","0","0","3","1","2901845","764","251920790","2.035211002","fb9d780b"