Sort directories by the newest file
Published on
If you need to clean up a file system (especially your $HOME directory from some ancient dot-files), it may be useful to sort the top-level directories by the last modified time of any file inside them.
Here’s the command I came up with:
find -printf '%T@/%P\n' | awk -F/ \
'{t[$2] = t[$2] > $1 ? t[$2] : $1}
END {
PROCINFO["sorted_in"] = "@val_num_asc";
for (key in t) {
printf "%s\t%s\n", strftime("%F", t[key]), key
}
}'
And here’s how the output looks like:
2007-07-30 .gkrellm2
2007-08-04 .gobby
2007-08-17 .imgseek
2007-08-25 .kderc
2007-09-12 .ftp_banner
2007-09-18 .BitchX
...
Thank you to numerous StackOverflow users from whose questions and answers I benefited; in particular the ones about printing mtime from find and sorting an AWK array.