filedb
filedb is a Go CLI utility for indexing file metadata across multiple libraries and collections.
- Library: logical grouping of collections, persisted as its own DuckDB database file.
- Collection: a backup-like dataset backed by either:
fs: local filesystem pathrclone:rclone lsjsonlisting for a remote/path
Checks are informational only. The tool does not modify or delete files.
Storage
- Default application directory:
~/.local/filedb - Library databases:
~/.local/filedb/libraries/*.duckdb(one database per library) - Override app directory with:
--app-dir <path>
Features
- Create/list libraries
- Create/list collections inside libraries
- Update one collection or a full library with one operation (file set + metadata only; no MD5 processing)
- Update MD5 hashes with dedicated
update-hashescommand - Store metadata: size, mod time, create time (if available), MD5 (if possible)
- Compare indexed metadata with current live files (
compare-live) - Offline duplicate checking inside indexed collection (
compare-offline) - Store reports inside each library DB by default
- Optional report export to JSON or HTML and optional no-store mode
Build
go build -o filedb ./cmd/filedb
Usage
filedb library-create --name archive
filedb collection-create --library archive --name tape-001 --type fs --source /data/tape-001
filedb collection-create --library archive --name remote-photos --type rclone --source myremote:photos
filedb collection-create --library archive --name remote-root --type rclone --remote myremote
filedb collection-create --library archive --name remote-subdir --type rclone --remote myremote --remote-path photos/2024
filedb update --library archive --collection tape-001
filedb update --library archive
filedb update-hashes --library archive --collection tape-001
filedb update-hashes --library archive --force-all
filedb update-hashes --library archive --modified-only
filedb update-hashes --library archive --collection tape-001 --file path/in/collection/file.iso
filedb update-hashes --library archive --collection tape-001 --file-list /tmp/files.txt
filedb compare-live --library archive --metadata size,md5 --collection tape-001
filedb compare-live --library archive --metadata size,md5
filedb compare-offline --library archive --metadata filename,size,md5,mtime --collection tape-001 --collection tape-002
filedb compare-offline --library archive --metadata filename,size,md5 --no-store-report --export html --output report.html
filedb report-list
filedb report-list --library archive
filedb report-show --id <report-id> --library archive
filedb report-export --id <report-id> --library archive --format json --output report.json
With custom app directory:
filedb --app-dir /tmp/filedb-data library-list
Metadata Fields
For comparison keys (--metadata):
filename(offline only; not allowed incompare-live)sizemtimectimemd5
Example:
filedb compare-offline --library archive --metadata filename,size,mtime
Notes
updatedoes not compute hashes. Useupdate-hashesfor MD5 processing.ctimeavailability is OS/filesystem dependent.- Rclone collections require
rcloneinPATH(validated at collection creation and indexing). - For rclone collections use either
--source <remote-or-remote:path>or--remote <remote> [--remote-path <path>]. updateskips disconnected/unreachable filesystem sources and rclone indexing failures, and continues with other collections.
Description
Languages
Makefile
100%