{"id":13550798,"url":"https://github.com/oniony/TMSU","last_synced_at":"2025-04-03T00:34:57.174Z","repository":{"id":24217893,"uuid":"27609918","full_name":"oniony/TMSU","owner":"oniony","description":"TMSU lets you tags your files and then access them through a nifty virtual filesystem from any other application.","archived":false,"fork":false,"pushed_at":"2024-05-10T01:25:00.000Z","size":9058,"stargazers_count":2136,"open_issues_count":111,"forks_count":127,"subscribers_count":59,"default_branch":"master","last_synced_at":"2025-03-31T01:09:31.141Z","etag":null,"topics":["command-line","filesystem","go","tagging"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oniony.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING.md","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":"2014-12-05T20:59:16.000Z","updated_at":"2025-03-28T12:48:35.000Z","dependencies_parsed_at":"2024-06-18T18:43:39.087Z","dependency_job_id":"e811919a-443e-4199-843c-694fe5596287","html_url":"https://github.com/oniony/TMSU","commit_stats":{"total_commits":1156,"total_committers":22,"mean_commits":52.54545454545455,"dds":0.05190311418685123,"last_synced_commit":"0bf4b8031cbeffc0347007d85647062953e90571"},"previous_names":[],"tags_count":36,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oniony%2FTMSU","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oniony%2FTMSU/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oniony%2FTMSU/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oniony%2FTMSU/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oniony","download_url":"https://codeload.github.com/oniony/TMSU/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246916735,"owners_count":20854511,"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":["command-line","filesystem","go","tagging"],"created_at":"2024-08-01T12:01:37.718Z","updated_at":"2025-04-03T00:34:52.160Z","avatar_url":"https://github.com/oniony.png","language":"Go","readme":"![TMSU](http://tmsu.org/images/tmsu.png)\n\n[![Build Status](https://travis-ci.org/oniony/TMSU.svg?branch=master)](https://travis-ci.org/oniony/TMSU)\n[![Go Report Card](https://goreportcard.com/badge/github.com/oniony/TMSU)](https://goreportcard.com/report/github.com/oniony/TMSU)\n\nOverview\n========\n\nTMSU is a tool for tagging your files. It provides a simple command-line utility\nfor applying tags and a virtual filesystem to give you a tag-based view of your\nfiles from any other program.\n\nTMSU does not alter your files in any way: they remain unchanged on disk, or on\nthe network, wherever your put them. TMSU maintains its own database and you\nsimply gain an additional view, which you can mount where you like, based upon\nthe tags you set up.\n\nUsage\n=====\n\nBefore you can get tagging, you'll need to initialise a TMSU database:\n\n    $ cd ~\n    $ tmsu init\n\nThis database will be used automatically whenever you are under that\ndirectory. In this case we created one under the home directory.\n\nYou can tag a file by specifying the file and the list of tags to apply:\n\n    $ tmsu tag banana.jpg fruit art year=2015\n\nOr you can apply tags to multiple files:\n\n    $ tmsu tag --tags=\"fruit still-life art\" banana.jpg apple.png\n\nYou can query for files with or without particular tags:\n\n    $ tmsu files fruit and not still-life\n\nMount the virtual filesystem to an empty directory:\n\n    $ mkdir mp\n    $ tmsu mount mp\n    \nA subcommand overview and detail on how to use each subcommand is available via the\nintegrated help:\n\n    $ tmsu help\n    $ tmsu help tags\n\nDocumentation is maintained online on the wiki:\n\n  * \u003chttps://github.com/oniony/TMSU/wiki\u003e\n\nInstalling\n==========\n\nPackages\n--------\n\nThanks to the efforts of contributors using these platforms, packages are available\nfor the following GNU/Linux distributions:\n\n  * Ubuntu\n    - Stable \u003chttps://launchpad.net/~tmsu/+archive/ubuntu/ppa\u003e\n    - Daily \u003chttps://launchpad.net/~tmsu/+archive/ubuntu/daily\u003e\n  * Arch\n    - Stable \u003chttps://aur.archlinux.org/packages/tmsu/\u003e\n  * Nix/NixOS\n    - Stable \u003chttps://search.nixos.org/packages?query=tmsu\u0026show=tmsu\u003e\n    - Unstable \u003chttps://search.nixos.org/packages?query=tmsu\u0026show=tmsu\u0026channel=unstable\u003e\n\nThese packages are not maintained by me and I cannot guarantee their content.\n\nBinary\n------\n\nBinary builds for a limited number of architectures and operating system\ncombinations are available:\n\n  * \u003chttps://github.com/oniony/TMSU/releases\u003e\n\nYou will need to ensure that both FUSE and Sqlite3 are installed for the\nprogram to function. These packages are typically available with your\noperating system's package management system. (If you install TMSU using one\nof the above packages, these should be installed automatically.)\n\n1. Install the binary\n\n    Copy the program binary. The location may be different for your operating\n    system:\n\n        $ sudo cp bin/tmsu /usr/bin\n\n2. Optional: Zsh completion\n\n    Copy the Zsh completion file to the Zsh site-functions directory:\n\n        $ cp misc/zsh/_tmsu /usr/share/zsh/site-functions\n\nFrom Source\n-----------\n\nIf you would rather build from the source code then please see `COMPILING.md`\nin the root of the repository.\n\nAbout\n=====\n\nTMSU itself is written and maintained by [Paul Ruane](mailto:Paul Ruane \u003cpaul@tmsu.org\u003e).\n\nThe creation of TMSU is motivation in itself, but if you should feel inclinded\nto make a small gift via Pledgie or Bitcoin then it shall be gratefully received:\n\n  * \u003chttps://pledgie.com/campaigns/31085\u003e\n  * `1TMSU5TL3Yj6AGP7Wq6uahTfkTSX2nWvM`\n\nTMSU is written in Go: \u003chttp://www.golang.org/\u003e\n\nMuch of the functionality the program provides is made possible by the FUSE and\nSqlite3 libraries, their Go bindings and the Go language standard library.\n\n  * Website: \u003chttp://tmsu.org/\u003e\n  * Project: \u003chttps://github.com/oniony/TMSU/\u003e\n  * Wiki: \u003chttps://github.com/oniony/TMSU/wiki\u003e\n  * Issue tracker: \u003chttps://github.com/oniony/TMSU/issues\u003e\n  * Mailing list: \u003chttp://groups.google.com/group/tmsu\u003e\n\nRelease Notes\n=============\n\nv0.8.0 (in development)\n------\n\n  * VFS now uses relative paths -- thanks to [foxcpp](https://github.com/foxcpp)\n  * Support for Blake2b-256 fingerprints -- thanks to [foxcpp](https://github.com/foxcpp)\n  * Hidden files are no longer tagged by default when tagging recursively. To include hidden files use the `--include-hidden` option -- thanks to [foxcpp](https://github.com/foxcpp)\n  * Fixes to Zsh completion -- thanks to [taiyu-len](https://github.com/taiyu-len) and [Shadoukan](https://github.com/Shadoukan)\n\nv0.7.5\n------\n\n  * Fixed issue with broken stderr pipe if VFS produces an error\n  * '--name' option on 'tags' subcommand now takes argument to control when file/value names are printed\n\nv0.7.4\n------\n\n  * Fixed further regressions with the set of files returned by `files` command. \n\nv0.7.3\n------\n\n  * VFS directories were showing incorrect files and tags\n\nv0.7.2\n------\n\n  * VFS directories were not showing for tag values\n\nv0.7.1\n------\n\n  * Fixed a bug where wrong files would be returned when an tag=value implied another tag -- thanks to [Fornost461](https://github.com/Fornost461)\n  * Specifying empty FUSE options would cause Fusermount to fail -- thanks to [metafex](https://github.com/metafex)\n  * Manual repair would drop the file fingerprint -- thanks to [c7nh7r](https://github.com/c7nh7r)\n\nv0.7.0\n------\n\n  *Note: this release changes how symbolic links are handled. See below.*\n\n  * TMSU now compiles for Mac O/S. (Thanks to https://github.com/pguth.)\n  * The VFS no longer lists files alongside the tag directories under `tags`.\n    Instead there are `results` directories at each level, within which you can\n    find the set of symbolic links to the tagged files.\n  * Symbolic links are now followed by default. This means that if you tag a\n    symbolic link, the target file is tagged instead. To instruct TMSU to not\n    follow symbolic links (previous behaviour) use the new `--no-dereference`\n    option on the relevant subcommands.\n  * Added new setting `symlinkFingerprintAlgorithm` to allow the fingerprint\n    algorithm for symbolic links to be configured separately to regular files.\n  * By default duplicate files will now be reported when tagging. A new setting\n    `reportDuplicates` can be used to turn this off.\n  * Slashes are now permitted within tags and values, useful for recording URLs.\n    In the virtual filesystem, similar looking Unicode characters are used in\n    their place.\n  * Added `--where` option to `tag` subcommand to allow tags to be applied to\n    the set of files matching a query.\n  * The VFS tags directory will now relist tags that have values so that\n    multiple values can be specified, e.g. tags/color/=red/color/=blue.\n  * It is now possible to list tags that use a particular value with the new\n    `--value` option on the 'tags' subcommand.\n  * Made it possible to upgrade the database schema between releases.\n  * Added `--count` option to `untagged`.\n  * Bug fixes.\n\nv0.6.1\n------\n\n  * Fixed crash when opening an empty tag directory in the VFS.\n\nv0.6.0\n------\n\n  *Note: this release changes the database schema by adding additional columns\n  to the 'implication' table. TMSU will automatically upgrade your database\n  upon first use but you may wish to take a backup beforehand.*\n\n  * Relaxed restrictions on tag and value names, allowing punctuation and\n    whitespace characters. Problematic characters can be escaped with backslash.\n  * Values are no longer automatically deleted when no longer used: it is now\n    up to you to manage them.\n  * Added --force option to 'tag' subcommand to allow tagging of missing or\n    permission denied paths and broken symlinks.\n  * 'imply' now creates tags if necessary (and 'autoCreateTags' is set).\n  * Performance improvements to the virtual filesystem.\n  * Fixed 'too many SQL variables' when merging tags applied to lots of files.\n  * Added --name option to 'tags' to force printing of name even if there is\n    only a single file argument, which is useful when using xargs.\n  * Replaced 'stats' subcommand with 'info' subcommand (with --stats and --usage\n    options for tag statics and usage counts respectively).\n  * Included a set of scripts for performing filesystem operations whilst\n    keeping the TMSU database up to date. If you wish to use these scripts\n    I recommend you alias them to simpler names, e.g. 'trm'.\n    - `tmsu-fs-rm`     Removes files from the filesystem and TMSU\n    - `tmsu-fs-mv`     Moves a file in the filesystem and updates TMSU\n    - `tmsu-fs-merge`  Merges files (deleting all but the last)\n  * Tag values can now be renamed, deleted and merged using the new --value\n    option on the corresponding subcommands.\n  * Tag values can now be used in implications.\n  * Tag values can be explicitly created: tmsu tag --create =2015. (It may\n    be necessary to enclose the argument in quotes depending upon your shell.)\n  * It is no longer possible to add a circular tag implication. (These were\n    not correctly applied anyway. An alias facility will be provided in a later\n    version.)\n  * The output of 'files' can now be sorted in various ways using --sort.\n  * Case insensitive queries can now be performed with the --ignore-case option\n    on the 'files' subcommand.\n  * Added integration tests covering CLI.\n  * Bug fixes.\n\nv0.5.2\n------\n\n  * Fixed bug where concurrent access to the virtual filesystem would cause\n    a runtime panic.\n\nv0.5.1\n------\n\n  * Fixed bug with database initialization when .tmsu directory does not\n    already exist.\n\nv0.5.0\n------\n\n  *Note: This release has some important changes, including the renaming of\n  some options, the introduction of local databases and a switch from absolute\n  to relative paths in the database. Please read the following release notes\n  carefully.*\n\n  * The --untagged option on the 'files' and 'status' subcommands has been\n    replaced by a new 'untagged' subcommand, which should be more intuitive.\n  * The --all option on the 'files', 'tags' and 'values' subcommands has been\n    removed. These commands now list the full set of files/tags/values when run\n    without arguments. For the 'tags' subcommand this replaces the previous\n    behaviour of listing tags for the files in the working directory: use 'tmsu\n    tags *' for approximately the previous behaviour.\n  * The 'repair' subcommand --pretend short option has changed from -p to -P (so\n    that -p can be recycled for --path).\n  * The 'repair' subcommand's argument now specify paths to search for moved\n    files and no longer limit how much of the database is repaired. A new --path\n    argument is provided for reducing the repair to a portion of the database.\n  * A new --manual option on the 'repair' subcommand allows targetted repair of\n    moved files or directories.\n  * The exclamation mark character (!) is no longer permitted within a tag or\n    value name. Please rename tags using the 'rename' command. (Value names will\n    need to be updated manually using the Sqlite3 tooling.)\n  * Added --colour option to the 'tags' subcommand to highlight implied tags.\n  * 'tag' subcommand will, by default, no longer explicitly apply tags that are\n    already implied (unless the new --explicit option is specified).\n  * Added subcommand aliases, e.g. 'query' for 'files'.\n  * It is now possible to tag a broken symbolic link: instead of an error this\n    will now be reported as a warning.\n  * It is now possible to remove tags with values via the VFS.\n  * 'tag' subcommand can tag multiple files with different tags by reading from\n    standard input by passing an argument of '-'.\n  * TMSU will now automatically use a local database in .tmsu/db in working\n    directory or any parent. The new 'init' subcommand allows a new local\n    database to be initialized. See [Switching Databases](https://github.com/oniony/TMSU/wiki/Switching%20Databases).\n  * Paths are now stored relative to the .tmsu directory's parent rather than as\n    absolute paths. This allows a branch of the filesystem to be moved around,\n    shared or archived whilst preserving the tagging information. Existing\n    absolute paths can be converted by running a manual repair:\n\n        tmsu repair --manual / /\n\n  * Added 'config' subcommand to view and amend settings.\n  * The 'help' subcommand now wraps textual output to fit the terminal.\n  * Rudimentary Microsoft Windows support (no virtual filesystem yet).\n  * TMSU can now be built without the Makefile.\n  * Bug fixes.\n\nv0.4.3\n------\n\n  * Fixed unit-test problems.\n\nv0.4.2\n------\n\n  * Fixed bug where 'dynamic:MD5' and 'dynamic:SHA1' fingerprint algorithms\n    were actually using SHA256.\n\nv0.4.1\n------\n\n  * Tag values are now shown as directories in the virtual filesystem.\n\nv0.4.0\n------\n\n  *Note: This release changes the database schema to facilitate tag values. To\n  upgrade your existing v0.3.0 database please run the following:*\n\n    $ cp ~/.tmsu/default.db ~/.tmsu/default.db.backup\n    $ sqlite3 -init misc/db-upgrade/0.3_to_0.4.0.sql ~/.tmsu/default.db .q\n\n  * Added support for tag values, e.g. 'tmsu tag song.mp3 country=uk' and the\n    querying of files based upon these values, e.g. 'year \u003e 2000'.\n  * 'tags' and 'values' subcommands now tabulate output, by default, when run\n    from terminal.\n  * Added ability to configure which fingerprint algorithm to use.\n  * Implied tags now calculated on-the-fly when the database is queried. This\n    results in a (potentially) smaller database and ability to have updates to\n    the implied tags affect previously tagged files.\n  * Added --explicit option to 'files' and 'tags' subcommands to show only\n    explicit tags (omitting any implied tags).\n  * Added --path option to 'files' subcommand to retrieve just those files\n    matching or under the path specified.\n  * Added --untagged option to 'files' subcommand which, when combined with\n    --path, will also include untagged files from the filesystem at the\n    specified path.\n  * Removed the --recursive option from the 'files' subcommand which was flawed:\n    use 'tmsu files query | xargs find' instead.\n  * Added ability to configure whether new tags and values are automatically\n    created or not or a per-database basis.\n  * Added --unmodified option to 'repair' subcommand to force the recalculation\n    of fingerprints of unmodified files.\n  * Renamed --force option of 'repair' subcommand to --remove.\n  * Added support for textual comparison operators: 'eq', 'ne', 'lt', 'gt',\n    'le' and 'ge', which do not need escaping unlike '\u003c', '\u003e', \u0026c.\n  * Improved Zsh completion with respect to tag values.\n  * Significant performance improvements.\n  * Removed support for '-' operator: use 'not' instead.\n  * Bug fixes.\n\nv0.3.0\n------\n\n  *Note: This release changes what tag names are allowed. To ensure the tag\n  names in your existing databases are still valid, please run the following\n  script:*\n\n    $ cp ~/.tmsu/default.db ~/.tmsu/default.db.backup\n    $ sqlite3 -init misc/db-upgrade/clean_tag_names.sql ~/.tmsu/default.db\n\n  * Added support for file queries, e.g. 'fish and chips and (mushy-peas or\n    ketchup)'.\n  * Added support for file query directories in the virtual filesystem.\n  * Added global option --database for specifying database location.\n  * Added ability to rename and delete tags via the virtual filesystem.\n  * 'tag' subcommand now allows tags to be created up front.\n  * 'copy' and 'imply' subcommands now support multiple destination tags.\n  * Improved 'stats' subcommand.\n  * Added man page.\n  * Added script to allow the virtual filesystem to be mounted via the\n    system 'mount' command or on startup via the fstab.\n  * Bug fixes.\n\n- - -\n\nCopyright 2011-2018 Paul Ruane\n\nCopying and distribution of this file, with or without modification,\nare permitted in any medium without royalty provided the copyright\nnotice and this notice are preserved.  This file is offered as-is,\nwithout any warranty.\n","funding_links":[],"categories":["Go","Applications","go","Repositories"],"sub_categories":["Utilities"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foniony%2FTMSU","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foniony%2FTMSU","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foniony%2FTMSU/lists"}