I've been using the Johnny Decimal system to organize my personal and shared files. It's working great so far. The limits imposed by the default JD numbering system help keep things manageable.

As much as I hear about the benefits of tagging1 for file systems, I really don't find it to be at all practical. Based on my experience with tagging in Calibre, I think it would be very difficult to maintain a well-organized tagging system for thousands of files. Like with physical objects, it's best to have one place for a file and then simply to familiarize yourself with your file hierarchy. In the rare case where I lose track of a file's location, tools like ripgrep are available.

I share files that are relevant to others via Samba2. Referring to a shared file's location by JD ID has been very useful.

I wrote a simple fish shell function to quickly navigate to a directory with a specific JD ID.

function jd
    cd ~/*/*/$argv*
end

You would use it similarly to the cd command like this:

$ jd 05.23

And it will put you directly into the directory with that JD ID.

A slightly more sophisticated version only looks into directories beginning with the JD "area" naming convention and has a nicer output if the directory isn't found.

function jd
    set -l dir (find ~ -maxdepth 1 -type d -name "[0-9][0-9]-[0-9][0-9]*" |
      while read dir
          find $dir -maxdepth 2 -type d -name "$argv[1]*"
      end)
    if test -n "$dir"
        cd "$dir"
        return 0
    else
        echo "Directory with JD ID $argv[1] does not exist."
        return 1
    end
end

Footnotes


1

I've installed and played around a bit with TMSU, but it felt like organizing files that way would be a huge maintenance burden.

2

Because I find it works better than NFS. Easier config, file permissions, and fewer network issues.