I need to remove files older than 3 days with a cron job in 3 different directories. (these 3 directories are children of a parent directory /a/b/c/1 & /a/b/c/2 & /a/b/c/3) Can this be done with one line in the crontab?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
This is easy enough (although note that this goes by a modification time more than 3 days ago since a creation time is only available on certain filesystems with special tools):
find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete
Remove the # before the -delete once you are sure that it is finding the files you want to remove.
To have it run by cron, I would probably just create an executable script (add a shebang – #!bin/sh to the top line of the file and make executable with chmod a+x), then put it in an appropriate cron directory like /etc/cron.daily or /etc/cron.weekly. Provided of course that you do not need a more specific schedule and that these directories exist on your distro.
Update
As noted below, the -delete option for find isn’t very portable. A POSIX compatible approach would be:
find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +
Again remove the # when you are sure you have the right files.
Update2
To quote from Stéphane Chazelas comment below:
Note that
-exec rm {} +has race condition vulnerabilities which-delete(where available) doesn’t have. So don’t use it on directories that are writeable by others. Some finds also have a-execdirthat mitigates against those vulnerabilities.
Method 2
You would be much better off using tmpwatch
tmpwatch recursively removes files which haven't been accessed for a given time. Normally, it's used to clean up directories which are used for temporary holding space such as /tmp.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0