How do I use the OS X
at command to schedule a daily clean-up of the user’s
I’m thinking something along the lines of:
rm -rf ~/.Trash/**/* | at 0:00 + 1 day
Will this clean the trash every day?
We’ll be running this command as part of a login script, so I also need a way to clear all the scheduled tasks. Is there a way to
at -r all?
rm -rf ~/Trash/* often results in permission denied errors unless you run it as root.
osascript -e 'tell app "Finder" to empty trash' would also show an error dialog if some files are in use.
You could try adding
0 0 * * * rm -rf ~/Trash/* to the root’s crontab (
sudo crontab -e).
Or using launchd, save a property list like this as
/Library/LaunchAgents/empty_trash.plist (and make it owned by root):
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd> <plist version="1.0"> <dict> <key>EnableGlobbing</key> <true/> <key>Label</key> <string>empty_trash</string> <key>ProgramArguments</key> <array> <string>rm</string> <string>-rf</string> <string>/Users/username/Trash/*</string> <!-- ~/ doesn't work --> </array> <key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>0</integer> <key>Minute</key> <integer>0</integer> </dict> </dict> </plist>
It’s loaded automatically on the next login, but you can load it immediately with
sudo launchctl load /Library/LaunchAgents/empty_trash.plist.
Hazel also has options for emptying the trash automatically.