Well, what if directory names were keywords?
"Being organized in your file systems means that we usually attach semantics to directories. For example, they can be sorted by activities, projects, years and so on... The more it is organized, the more, you have built a hierarchy with directories. It is nice, except, ... you have to go all the way down to the hierarchy in order to find the pieces of information you put in some files...
The idea behind keywordfs is to remount your filesystem so that the names of the directories are keywords. Then you can navigate through them using keywords instead of a full hierarchy. The idea is that you can borrow shortcuts to get the files.
Here is an example in order to understand the idea. Let's suppose that we have this kind of directory hierarchy in a part of your physical file system
|- research
| |- projects
| | |- ResearchProjectA
| | | |- 2020
| | | |- 2021
| | |- ResearchProjectB
| | | |- 2021
| | | |- 2022
|- teaching
|- 2021
| |- SubjectA
| |- SubjectB
|- 2022
|- SubjectB
|- SubjectC
We have then the following keywords:
research
,projects
,ResearchProjectA
,ResearchProjectB
,2020
,2021
,2022
,teaching
,subjectA
,subjectB
,subjectC
If, at the root of the mounted virtual filesystem, I type:
-
cd 2020
: I will go toresearch/projects/researchProjectA/2020
, -
cd SubjectC
: I will go toteaching/2022/SubjectC
, -
cd 2021/researchProjectB
: I will go toresearch/projects/researchProjectB/2021
, -
cd 2022
: well, it will go toteaching/2022
(shortest path in terms of string length and then first in alphabetical order). However, from this point, I will be able to see 5 subdirectories that areresearch
,projects
,ResearchProjectB
,SubjectB
andSubjectC
. Basically, it means that I will be able to navigate to related keywords until there is a single entry that matches the keyword combination.
There you have the concept behind keywordfs."
You will need git
and nodeJS
or equivalents.
You first have to clone this repository:
$ git clone https://github.com/jydidier/keywordfs.git
Then, you will have to install javascript dependencies:
cd keywordfs
npm install
Dependencies are using a slightly modified version of https://github.com/direktspeed/node-fuse-bindings, needed for more recent systems as well as polyfills for the definition of Set
that, in some versions of nodeJS, was missing some of the ECMAScript 6 specifications.
Go into your keywordfs
directory and then start it
$ node keywordfs.js <mountpoint> <referencepoint>
Then, you can enjoy it by going to the mountpoint.
For all subdirectories, a symlink named @ is generated that points to the related actual directory.
Many things are still needed for this proof of concept to work perfectly:
- robustify many FUSE operations
- check performance issues that may arise