18 breaking releases

0.37.0 Nov 5, 2022
0.35.0 Mar 7, 2022
0.34.0 Mar 7, 2022
0.32.0 Sep 5, 2021
0.13.0 Dec 20, 2019

#489 in Text processing

Download history 12/week @ 2022-11-28 24/week @ 2022-12-05 53/week @ 2022-12-12 28/week @ 2022-12-19 14/week @ 2022-12-26 10/week @ 2023-01-02 21/week @ 2023-01-09 12/week @ 2023-01-16 41/week @ 2023-01-23 89/week @ 2023-01-30 32/week @ 2023-02-06 130/week @ 2023-02-13 51/week @ 2023-02-20 7/week @ 2023-02-27 30/week @ 2023-03-06 18/week @ 2023-03-13

138 downloads per month
Used in 2 crates

MIT license

514 lines

Tagsearch - Search for, and/or summarise, tags in plaintext files.



This finds all instances of @ALPHANUMERIC (e.g. roughly matches the regex @[a-zA-Z0-9]) across .txt, .md, and .org recursively under the current directory.

The purpose of this script is to basically let me manage information in plaintext much more easily. I've added a separate file giving a rough overview of how I apply it to different usecases.


A prime motivation was to move away from more commercial software. Even though I can afford to use a few subscription services, I feel like it's better to simplify my processes down. This has multiple benefits:

  • saving money; not subscribing to as many services
  • no vendor lock-in; don't need to worry about losing my data if a vendor goes out of business, or changes their pricing model
  • less 'failure modes'; with a simple plaintext system, built the way I want it to, I don't have to worry about all the interactions or working the way that other software requires me to. Everything is basically human readable, with a few helper scripts to handle the data in different ways.
  • portability; I don't need to worry about finding an app that works across Windows, OSX, and Linux. I can realistically access my data across any device that can handle text files. Every device I currently work with has the ability to search within files, so even without tools such as this, I can still filter my information down.

The main bit of commercial software I still use is Dropbox, so I can get information across all my devices without having to worry about doing things like syncing git. I do however have a cronjob which backs up this information to git. One change this makes to my process is using the file extension .txt instead of .md for my markdown files; this simply lets me utilise Dropbox's full-text search from the web or android app to find information when I don't have access to a terminal and my own helper scripts.


Can be either installed from source, or installed with cargo:

From source:

git clone git@github.com:Chrisdavison/tagsearch
cd tagsearch
cargo install --path . --force

From cargo

cargo install tagsearch


regex = "1"
glob = "0.3.0"
lazy_static = "1.4.0"
structopt = "0.3.3"


Current usage string:

tagsearch 0.27.0
search for, and/or summarise, tags in plaintext files

    tagsearch [FLAGS] [OPTIONS] [--] [keywords]...

    -c, --count           Show count of tags
    -h, --help            Prints help information
    -l, --list            List all tags for files matching keywords
        --long            Long list (e.g. tall) all tags for files matching keywords
    -o, --or-filter       Filter using ANY, rather than ALL keywords
        --similar-tags    Show similar tags
    -u, --untagged        Show untagged files
    -V, --version         Prints version information
    -v, --vim             Output format suitable for vim quickfix

        --not <not>...    Keywords to inverse filter (i.e. ignore matching files)

    <keywords>...    Keywords to filter


# display all tags

# display all tags in a column (like ls -l)
tagsearch --long

# Show files tagged 'golang'
tagsearch golang

# List all tags that occur along with golang
tagsearch -l golang

# Show files tagged 'rust', but NOT tagged 'video'
tagsearch rust --not video

# Show files that match spanish OR espanol
tagsearch -o spanish espanol


~85K SLoC