{"id":17002517,"url":"https://github.com/deadc0de6/gocatcli","last_synced_at":"2025-03-22T16:30:40.822Z","repository":{"id":222717293,"uuid":"758131686","full_name":"deadc0de6/gocatcli","owner":"deadc0de6","description":"The command line catalog tool for your offline data","archived":false,"fork":false,"pushed_at":"2025-03-11T11:17:56.000Z","size":171,"stargazers_count":18,"open_issues_count":2,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-18T13:32:02.040Z","etag":null,"topics":["catalog","commandline","indexer"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deadc0de6.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-15T17:24:45.000Z","updated_at":"2025-03-17T11:21:18.000Z","dependencies_parsed_at":"2025-02-12T08:35:47.573Z","dependency_job_id":"dbd3ace0-6305-4a63-9953-a15e204222ef","html_url":"https://github.com/deadc0de6/gocatcli","commit_stats":null,"previous_names":["deadc0de6/gocatcli"],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deadc0de6%2Fgocatcli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deadc0de6%2Fgocatcli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deadc0de6%2Fgocatcli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deadc0de6%2Fgocatcli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deadc0de6","download_url":"https://codeload.github.com/deadc0de6/gocatcli/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244986259,"owners_count":20542982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["catalog","commandline","indexer"],"created_at":"2024-10-14T04:28:16.591Z","updated_at":"2025-03-22T16:30:40.816Z","avatar_url":"https://github.com/deadc0de6.png","language":"Go","funding_links":["https://ko-fi.com/deadc0de6"],"categories":[],"sub_categories":[],"readme":"# gocatcli\n\n[![Tests Status](https://github.com/deadc0de6/gocatcli/workflows/tests/badge.svg)](https://github.com/deadc0de6/gocatcli/actions)\n[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](http://www.gnu.org/licenses/gpl-3.0)\n\n[![Donate](https://img.shields.io/badge/donate-KoFi-blue.svg)](https://ko-fi.com/deadc0de6)\n\n*[gocatcli](https://github.com/deadc0de6/gocatcli) is a catalog tool for your offline data*\n\nDid 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?\nYou usually go through all of them hoping to find the right one on the first try?\n`gocatcli` indexes external media in a catalog file and allows to quickly find\nspecific files or even navigate in the catalog as if it was a mounted drive.\n\nFeatures:\n\n* Index filesystem/directories in a catalog\n* Multiple ways to explore the catalog (`ls`, `find`, `tree`, tui browser, `fzf`, etc)\n* Use wildcards to search for files\n* archives support (index their content as well)\n* Save catalog for easy versioning with git\n* Support catalog in json or toml\n* Multiple outputs (`csv`, etc)\n* Mount file using fuse\n* Re-create locally the catalog hierarchy\n* ... and much more\n\nQuick start:\n```bash\ngocatcli index \u003csome-path\u003e\ngocatcli nav\ngocatcli tree\n```\n\n# Why gocatcli?\n\n`gocatcli` gives the ability to navigate, explore and find your files that are stored on external media\n(DVDs, hard drives, USB sticks, etc) when those are not connected.\n`gocatcli` can just as easily index any arbitrary directories.\n\n---\n\n**Table of Contents**\n\n* [Installation](#installation)\n* [Usage](#usage)\n\n  * [Index data](#index-data)\n  * [Reindex and update](#reindex-and-update)\n  * [Index archives](#index-archives-and-their-content)\n  * [Navigate with ls](#navigate-with-ls)\n  * [File browser](#file-browser)\n  * [Tree view](#tree-view)\n  * [Find files](#find-files)\n  * [Find files with fzf](#find-files-with-fzf)\n  * [Disk usage](#disk-usage)\n  * [Create hierarchy locally](#create-hierarchy-locally)\n  * [Mount the catalog filesystem](#mount-filesystem)\n  * [Edit storage](#edit-storage)\n  * [Output formats](#output-formats)\n  * [Convert catcli catalog](#convert-catcli-catalog)\n\n* [From catcli to gocatcli](#from-catcli-to-gocatcli)\n* [Contribution](#contribution)\n* [Thank you](#thank-you)\n\n# Installation\n\nPick a binary in the [releases](https://github.com/deadc0de6/gocatcli/releases)\n\nOr if you have go installed, you can installed it directly\n```bash\n## You need at least golang 1.22\n$ go install -v github.com/deadc0de6/gocatcli/cmd/gocatcli@latest\n$ gocatcli --help\n```\n\nOr if you want to compile it yourself\n```bash\n## You need at least golang 1.22\n$ go mod tidy\n$ make\n$ ./bin/gocatcli --help\n```\n\nIt's also available on [Nix](https://github.com/NixOS/nixpkgs) (unstable channel only, for now). If you have Nix installed, one way you can try it out is like this:\n``` bash\nnix-shell -p gocatcli\n```\n\n# Usage\n\nThe primary use of gocatcli is to index your data (external hardrives, etc) into a catalog\nand then have the ability to browse their content (as well as search, navigate, etc) while these\nare stored away.\n\n```bash\n$ gocatcli --help\n$ gocatcli index --help\n$ gocatcli ls --help\n$ gocatcli tree --help\n$ gocatcli nav --help\n...\n```\n\n[gocatcli](https://github.com/deadc0de6/gocatcli) indexes files in a tree-like structure.\nThere are different types of entry in a catalog:\n\n* `top node`: the root of the hierarchy\n* `storage node`: this represents an indexed storage (a DVD, an external hard drive, an USB drive, some arbitrary directory, etc).\n* `dir node`: this is a directory\n* `file node`: this is a file\n* `archive node`: this is an archive file (tar, zip, etc)\n* `archived node`: this is a file contained in an archive\n\nWildcards are supported in the `\u003cpath\u003e` arguments of all commands and provide a way\nto explore the catalog using something like `'storage/directory*/sub-directory*'`,\nMake sure to quote these on the command line to avoid your shell interpreting the\nwildcards.\n\nAll command line switches can be provided using environment variables by\nprefixing with `GOCATCLI_` and adding the switch name in capital and `-`\nreplaced with `_`. For example `--catalog` would be `GOCATCLI_CATALOG=mycatalog.catalog`.\n\nYou can generate shell completion scripts using `gocatcli completion`\n```bash\n## for zsh\n## copy the file to a path within ${fpath}\n$ gocatcli completion zsh\n## for bash\n## source the file\n$ gocatcli completion bash\n## for fish\n## mkdir -p ~/.config/fish/completions\n## cp gocatcli.fish ~/.config/fish/completions/gocatcli.fish\n$ gocatcli completion fish\n```\n\n## Index data\n\n```bash\n$ gocatcli index --help\n```\n\nIndex any directories with\n```bash\n# the directory will be stored in the catalog under\n# the storage \"directory\"\n$ gocatcli index /some/directory\n\n# you can specify the name of the storage\n$ gocatcli index /some/other/path myStorageName\n```\n\n[gocatcli](https://github.com/deadc0de6/gocatcli) uses the *basename* of the\npath to index as the storage name unless you specify the name when indexing.\n\nThe below example ignores any file ending with `.go` or `.md` and anything in the `.git` directory:\n```bash\n$ gocatcli index ../gocatcli --ignore=\"*.go\" --ignore=\"*.md\" --ignore=\"*.git/*\"\n```\n\n## Reindex and update\n\nTo re-index the content of an already indexed storage, simply re-run `index` on it\n```bash\n## initial indexing\n$ ./bin/gocatcli index /tmp tmp-dir\n## re-indexing...\n$ ./bin/gocatcli index /tmp tmp-dir\nA storage with the name \"tmp-dir\" already exists, update it? [y/N]: y\n```\n\n## Index archives and their content\n\n`gocatcli` is able to index the content of archives.\nSimply provide `-a --archive` to your `index` command.\n\nSupported archive formats (from \u003chttps://github.com/mholt/archiver\u003e):\n\n* brotli (.br)\n* bzip2 (.bz2)\n* flate (.zip)\n* gzip (.gz)\n* lz4 (.lz4)\n* snappy (.sz)\n* xz (.xz)\n* zlib (.zz)\n* zstandard (.zst)\n* .zip\n* .tar (including any compressed variants like .tar.gz)\n* .rar\n* .7z\n\n## Navigate with ls\n\n```bash\n$ gocatcli ls --help\n```\n\n```bash\n$ gocatcli ls\n$ gocatcli ls storage-name/some/path\n$ gocatcli ls 'storage-name/direc*/subdire*'\n```\n\n## File browser\n\nA terminal file browser for your catalog\n```bash\n$ gocatcli nav --help\n```\n\nYou can type `?` to get a list of available options.\n\n## Tree view\n\n```bash\n$ gocatcli tree --help\n```\n\n## Find files\n\nWith the `find` command you can easily find all files matching a specific\npattern. You can also limit your search to a specific path\n\n```bash\n$ gocatcli find --help\n## lists all files\n$ gocatcli find\n## find using pattern\n$ gocatcli find pattern\n## find using pattern and limit to a specific path\n$ gocatcli find pattern -p some/path\n$ gocatcli find pattern -p 'some/p*th'\n```\n\n## Find files with fzf\n\nA terminal fzf file browser for your catalog\n```bash\n$ gocatcli fzfind --help\n```\n\n## Disk usage\n\n```bash\n$ gocatcli du --help\n```\n\n## Create hierarchy locally\n\n```bash\n$ gocatcli create --help\n```\n\n## Mount filesystem\n\n```bash\n$ gocatcli mount --help\n```\n\n## Edit storage\n\n```bash\n$ gocatcli storage --help\n```\n\nList all storages with the `storage list` command.\n\nRemove a storage and its children with the `storage rm` command.\n\nFollowing commands allow to edit a storage and its fields:\n\n* `meta`: storage description\n* `tag`: add a tag to the storage\n* `untag`: remove a tag from the storage\n\n## Output formats\n\n* `native`: ls-like output\n* `csv`: csv\n* `csv-with-header`: csv with header\n* `tree`: tree\n* `script`: generates a script to handle matches\n* `debug`: debug output\n\n## Convert catcli catalog\n\n```bash\n$ gocatcli convert --help\n```\n\n# From catcli to gocatcli\n\n\u003chttps://github.com/deadc0de6/catcli/\u003e\n\n```bash\n$ gocatcli convert --help\n```\n\n# Contribution\n\nIf you are having trouble installing or using `gocatcli`, open an issue.\n\nIf you want to contribute, feel free to do a PR.\n\nThe `tests.sh` script handles the linting and runs the tests.\n\n# Thank you\n\nIf you like `gocatcli`, [buy me a coffee](https://ko-fi.com/deadc0de6).\n\n# License\n\nThis project is licensed under the terms of the GPLv3 license.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeadc0de6%2Fgocatcli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeadc0de6%2Fgocatcli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeadc0de6%2Fgocatcli/lists"}