Cron installation is vixie-cron
/etc/cron.daily/rmspam.cron
#!/bin/bash /usr/bin/rm /home/user/Maildir/.SPAM/cur/*;
I Have this simple bash script that I want to add to a cron job (also includes spam learning commands before) but this part always fails with ‘File or directory not found’ From what I figure is the metachar isn’t being interperted correctly when run as a cron job. If I execute the script from the commandline it works fine.
I’d like a why for this not working and of course a working solution 🙂
Thanks
edit #1 came back to this question when I got popular question badge for it. I first did this,
#!/bin/bash find /home/user/Maildir/.SPAM/cur/ -t file | xargs rm
and just recently was reading through the xargs man page and changed it to this
#!/bin/bash find /home/user/Maildir/.SPAM/cur/ -t file | xargs --no-run-if-empty rm
short xargs option is -r
If there are no files in the directory, then the wildcard will not be expanded and will be passed to the command directly. There is no file called ‘*’, and then the command fails with ‘File or directory not found.’ Try this instead:
Or just use the ‘-f’ flag to rm. The other problem with this command is what happens when there is too much spam for the maximum length of the command line. Something like this is probably better overall:
If you have an old find that only execs rm one file at a time:
That handles too many files as well as no files. Thanks to Charles Duffy for pointing out the + option to -exec in find.