How to compact large directories
Solution 1:
Directories can not be compacted online exactly because of the requirements of seekdir/telldir. They require any program to be able to maintain position within the directory for indefinite time and still only read any given entry once; therefore, the entries can not be moved around while the fs is mounted.
You can compact the directory offline with e2fsck -D
.