QUESTION :
How do I use the OS X at
command to schedule a daily clean-up of the user’s .Trash
folder?
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
?
ANSWER :
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.