A simple strategy to improve disk read/access on directories full of files

How the redistribute files in a directory in order to overcome slow disk read/access.

I was facing an issue when opening/reading my ebooks because I have thousands of files in a single directory.
They are sorted alphabetically, so, files starting with 'a' go to the directory 'a/', and so on.
But because I have so many files at the same directory level as we will see below, this degrades the read performance considerably.

In order to overcome this, I first got the number of files per directory based on [1]:
netto@morpheus:~/ebooks$ find . -maxdepth 1 -type d | while read dir;
> do
>   printf "%-3.25s : " "$dir"
>   find "$dir" -type f | wc -l
> done
./0: 2949
./1: 3708
./2: 2213
./3: 694
./4: 523
./5: 336
./6: 235
./7: 200
./8: 205
./9: 297
./a: 7018
./b: 3523
./c: 6395
./d: 3995
./e: 3366
./f: 2652
./g: 1698
./h: 2104
./i: 3450
./j: 1338
./k: 967
./l: 2967
./m: 5621
./n: 1665
./o: 2384
./p: 5286
./q: 253
./r: 3289
./s: 7247
./t: 4310
./u: 840
./v: 1046
./w: 2187
./x: 195
./y: 98
./z: 243
With this quick analysis, I discovered that 's/', 'a/', 'c/', 'm/', 'p/' have more than 5000 files each.
The solution is simple: instead of having a directory with all files, let's break the directory into subdirectories and move files accordingly.
e.g.: 's/' becomes 's/s0', ..., 's/s9', 's/sa', ..., 's/sz'

So, a file 's/springer-models_computation.pdf' turns into 's/sp/springer-models_computation.pdf'

Before, the command time was reporting:
netto@morpheus:~/ebooks$ time ls s/
...
real	0m0,280s
user	0m0,050s
sys	0m0,074s

After the changes, it is reporting:
netto@morpheus:~/ebooks$ time ls s/
...
real	0m0,006s
user	0m0,004s
sys	0m0,000s

It's a ~98% speed up!