Ask HN: How do you organize your files
Seems like a Silly Question, but how do you organize your files.
I struggle to find a way to keep my reference documentation organized such as ebooks relevant for programming or other related tasks.
thanks for reading
43 comments
[ 3.0 ms ] story [ 92.8 ms ] threadEdit: Also you might want to make a small title edit s/files/ebooks unless you are inquiring about other types of files as well.
This is a directory that can be emptied at any moment without the fear of losing anything important, and which help me keeping the rest of my fs clean. Basically `/tmp` for user.
So, no organization (the ocd part of me hates this) but i always find my files in an instant, no matter where i left them.
https://www.lesbonscomptes.com/recoll/
I also recommend calibre for e-books, but I never got to the "document store" stage that I think some people have.
~/dev for any personal project work
~/$COMPANY for any professional work I do for $COMPANY
~/teaching for teaching stuff
~/research for academic research (it's a big mess unfortunately)
~/icl for school related projects (where "icl" is Imperial College London)
For my PDFs I use Mendeley to organize them and have them available everywhere along with my annotations.
I store my books in iBooks and on Google Drive in a scheme roughly like: /books/$topic/$subtopic
Usually organizing your files is usually just commitment, move files off ~/Downloads as soon as you can :-)
~/github - just cloned repos
~/fork - everything forked
~/pdf - all science papers
As for all "working" documents, they're local to my machine under a documents or project folder. The documents folder is synced to all my devices and looks the same everywhere with a similar organization structure as my external drive. My projects folder is only local to my machine, which is a portable, and contains all the documents needed for that project.
TL;DR Shallow folder structure with dates at the beginning of files essentially.
Other things are better sorted by category or topic. For tools or programming languages I'm researching I might have a directory with items "01_some-language", "02_setup", "10_type-system", "20_ecosystem", etc.
As you find yourself collecting more general files under a directory that can be logically grouped, create a new directory and move them to it.
Also keep all your directories in the same naming convention (idk maybe I'm just OCD)
But it has problems. For instance, I like to collect information about robotics and artificial intelligence. In many cases I have papers with titles like "Using Computer Vision to Control a Robot Arm via a CNN". Do I put it under "robotics/sensors/vision" or "ai-ml/anns/cnn" or "robotics/motion-control/platform/arm"...or...? It can technically fit into any and all of those categories!
That's a problem with hierarchical category structures; when something can fit into multiple categories, you can either duplicate the information (not good - unless your system has some way of using pointer refs or such to prevent data duplication - which most file systems don't), cross-link the information (put it in a canonical spot and symlink to it), or just say "f-it" and stick it someplace, and hope you can find it later (which sometimes you can't).
What I wish I had, instead, was a simple means to search my filesystem in a very quick fashion. Ideally, it would be something like the old Google Search Appliance, which could spider and index my filesystem, read each file (and any metadata stored in the file, such as in the case of videos and images) and build up an index that can be quickly and easily searched. It would also keep this index up-to-date as files are added, removed, or changed.
Unfortunately, I've yet to find a low-cost (ideally free) open-source solution to this problem, that was also easy to set up and maintain. I've found more than a few solutions (or partials) which given enough admin and configuration (plus maintenance and/or glue code) could potentially become the system I want, but none of them were "turnkey" - install, simple setup (nothing more complex than a NAS or WiFi Router, for instance), and "let it go". They were all very "enterprise-y" and required more than a bit of effort to install and maintain. It isn't that I couldn't do that, I just don't have the time to dedicate to such a task. But it might be something I just have to bite the bullet for.
Maybe what I need to do is research the latest offering of FreeNAS - maybe they've (since the last time I used it) implemented a decent search engine module (or some third party plugin has been created) to handle this issue?
1. https://www.voidtools.com/downloads/
Non Golang code will go to ~/code, sometimes ~/code/company-name but I also have couple of ad hoc codebases spread around in different places on my filesystem.
So it is a bit disorganized. However last few years I have rarely ever needed to cd outside of ~/code/go.
Some legacy codebases I worked on (and still need to contribute to from time to time) can be in most random places as it took some effort and time to configure local environment of some of these beasts to be working properly (and they depend on stuff like Apache vhosts) so I am too afraid to move those to ~/code as I might break my local environment.
~/Dropbox/dev-media/slides
~/Dropbox/dev-media/video
When reading for pleasure I typically read paper, try to limit the screen time if possible.
- music: Musicbrainz Picard to get the metadata right. I've been favoring RPis running mpd as a front-end to my music lately.
- movies/TV: MediaElch + Kodi
I don't have a good solution for managing pictures and personal videos that doesn't involve handing all of it to some awful, spying "cloud" service. Frankly most of this stuff is sitting in Dropbox (last few years worth) or, for older files, in a bunch of scattered "files/old_desktop_hd_3_backup/desktop/photos"-type directories waiting for my wife and I to go through them and do something with them. Which is increasingly less likely to happen—sometimes I think the natural limitations of physical media were a kind of blessing, since one was liberated from the possibility of recording and retaining so much. Without some kind of automatic facial recognition and tagging—and saving of the results in some future-proof way, ideally in the photos/videos themselves—this project is likely doomed.
My primary unresolved problem is finding some sort of way to preserve integrity and provide multi-site backup that doesn't waste a ton of my time+money on set-up and maintenance. When private networks finally land in IPFS I might look at that, though I think I'll have to add a lot of tooling on top to make things automatic and allow additions/modifications without constant manual intervention, especially to collections (adding one thing at a time, all separately, comes with its own problems, like having to enumerate all of those hashes when you want something to access a category of things, like, say, all your pictures). Probably I'll have to add an out-of-band indexing system of some sort, likely over HTTP for simplicity/accessibility. For now I'm just embedding a hash (CRC32 for length reasons and because I mostly need to protect against bit-rot, not deliberate tampering) at the end of filenames, which is, shockingly, still the best cross-platform way to assert a content's identity, and synchronizing backups with rsync—ZFS is great and all but doesn't preserve useful hash info if a copy of a file is on a non-ZFS filesystem, plus I need basically zero of its features aside from periodically checking file integrity.
Outside of that scope, my files reside randomly somewhere in the ~/Documents folder (I use a mac) and I rely on spotlight to find the item I need. It's not super great but is workable often enough.
It's not a silly question!
edit: I've been trying to find a multi-disk solution and haven't had much success with an easy enough to use tool. I use git-annex for this and it helps to some extent. I've also tried Camlistore, which is promising, but has a long way to go.
Web sites are
with each site under version control.Currently reconstructing the entire thing to production spec, as an AWS AMI, perhaps later polished into a personal knowledge base saas where the cleaned and sorted content is public accessible with REST/cmis api.
This project has single handedly eaten almost a third of my life.