gocatcli is a catalog tool for your offline data
Did you ever wanted to find back that specific file that should be on one of your backup DVDs or one of your external hard drives?
You usually go through all of them hoping to find the right one on the first try?
gocatcli
indexes external media in a catalog file and allows to quickly find
specific files or even navigate in the catalog as if it was a mounted drive.
Features:
- Index filesystem/directories in a catalog
- Multiple ways to explore the catalog (
ls
,find
,tree
, tui browser,fzf
, etc) - Use wildcards to search for files
- archives support (index their content as well)
- Save catalog to json for easy versioning with git
- Multiple outputs (
csv
, etc) - Mount file using fuse
- Re-create locally the catalog hierarchy
- ... and much more
Quick start:
gocatcli index <some-path>
gocatli nav
gocatli tree
gocatcli
gives the ability to navigate, explore and find your files that are stored on external media
(DVDs, hard drives, USB sticks, etc) when those are not connected.
gocatcli
can just as easily index any arbitrary directories.
Table of Contents
Pick a binary in the releases
Or if you have go installed, you can installed it directly
## You need at least golang 1.22
$ go install -v github.com/deadc0de6/gocatcli/cmd/gocatcli@latest
$ gocatcli --help
Or if you want to compile it yourself
## You need at least golang 1.22
$ go mod tidy
$ make
$ ./bin/gocatcli --help
The primary use of gocatcli is to index your data (external hardrives, etc) into a library and then have the ability to browse their content (as well as search, navigate, etc) while these are stored away.
$ gocatcli --help
$ gocatcli index --help
$ gocatcli ls --help
$ gocatcli tree --help
$ gocatcli nav --help
...
Wildcards are supported in the <path>
arguments of all commands and provide a way
to explore the catalog using something like 'storage/directory*/sub-directory*'
,
Make sure to quote these on the command line to avoid your shell interpreting the
wildcards.
All command line switches can be provided using environment variables by
prefixing with GOCATCLI_
and adding the switch name in capital and -
replaced with _
. For example --catalog
would be GOCATCLI_CATALOG=mycatalog.catalog
.
You can generate shell completion scripts using gocatcli completion
## for zsh
## copy the file to a path within ${fpath}
$ gocatcli completion zsh
## for bash
## source the file
$ gocatcli completion bash
## for fish
## mkdir -p ~/.config/fish/completions
## cp gocatcli.fish ~/.config/fish/completions/gocatcli.fish
$ gocatcli completion fish
$ gocatli index --help
Index any directories with
$ gocatcli index /some/directory
The below example ignores any file ending with .go
or .md
and anything in the .git
directory:
$ gocatcli index ../gocatcli --ignore="*.go" --ignore="*.md" --ignore="*.git/*"
To re-index the content of an already indexed storage, simply re-run index
on it
## initial indexing
$ ./bin/gocatcli index /tmp tmp-dir
## re-indexing...
$ ./bin/gocatcli index /tmp tmp-dir
A storage with the name "tmp-dir" already exists, update it? [y/N]: y
gocatcli
is able to index the content of archives.
Simply provide -a --archive
to your index
command.
Supported archive formats (from https://github.com/mholt/archiver):
- brotli (.br)
- bzip2 (.bz2)
- flate (.zip)
- gzip (.gz)
- lz4 (.lz4)
- snappy (.sz)
- xz (.xz)
- zlib (.zz)
- zstandard (.zst)
- .zip
- .tar (including any compressed variants like .tar.gz)
- .rar
- .7z
$ gocatli ls --help
$ gocatcli ls
$ gocatcli ls storage-name/some/path
$ gocatcli ls 'storage-name/direc*/subdire*'
A terminal file browser for your catalog
$ gocatli nav --help
You can type ?
to get a list of available options.
$ gocatli tree --help
With the find
command you can easily find all files matching a specific
pattern. You can also limit your search to a specific path
$ gocatli find --help
## lists all files
$ gocatcli find
## find using pattern
$ gocatcli find pattern
## find using pattern and limit to a specific path
$ gocatcli find pattern -p some/path
$ gocatcli find pattern -p 'some/p*th'
A terminal fzf file browser for your catalog
$ gocatli fzfind --help
$ gocatli du --help
$ gocatli create --help
$ gocatli mount --help
$ gocatli storage --help
List all storages with the storage list
command.
Remove a storage and its children with the storage rm
command.
Following commands allow to edit a storage and its fields:
meta
: storage descriptiontag
: add a tag to the storageuntag
: remove a tag from the storage
native
: ls-like outputcsv
: csvcsv-with-header
: csv with headertree
: treescript
: generates a script to handle matchesdebug
: debug output
$ gocatli convert --help
https://github.com/deadc0de6/catcli/
$ gocatli convert --help
If you are having trouble installing or using gocatcli
, open an issue.
If you want to contribute, feel free to do a PR.
The tests.sh
script handles the linting and runs the tests.
If you like gocatcli
, buy me a coffee.
This project is licensed under the terms of the GPLv3 license.