find . -type f -mtime +5 -print0 | xargs -0 rm
find . -type d -depth -print0 | xargs -0 rmdir 2>/dev/null
With these two bash commands, you can recursively delete all files older than 5 days and after that all now empty directories. I use these commands to clean up temp directories.
In the first line -mtime +5
finds all files that are older than 5 days. The +
sign is important. Without it, only those being exactly 5 days (5 * 86400 seconds) old would be found.
In the second line -depth
makes that child directories are treated before parents. That is important here. Otherwise a directory a
which contained only an empty directory b
would not be deleted.
rmdir
only deletes empty directories. For that you don’t see rmdir's
griping about non-empty ones, the 2>/dev/null
is used.