Submit Hint Search The Forums LinksStatsPollsHeadlinesRSS
14,000 hints and counting!


find ? | 18 comments | Create New Account
Click here to return to the 'find ?' hint
The following comments are owned by whoever posted them. This site is not responsible for what they say.
find ?
Authored by: Soliman on Jun 19, '07 10:16:17AM

@hourly for cleaning the Trash seems a bit overkill, no ?

Here is what I have in my crontab:

### Everyday at 6.45
45 6 * * * /usr/bin/find /Users/Soliman/.Trash -mindepth 1 -maxdepth 1 -not -newerat '7 days ago' -delete

I use 'access time' as a reference (penultimate letter in newerat) and remove what is not newer (thus older) than 7 days.
You can add -ls if you want to know what was deleted...



[ Reply to This | # ]
find ?
Authored by: TonyT on Jun 19, '07 11:30:59AM

Nice cron, but why "-mindepth 1 -maxdepth 1" ?



[ Reply to This | # ]
find ?
Authored by: Soliman on Jun 19, '07 11:43:44AM

-mindepth 1 is to avoid removing .Trash itself :)

-maxdepth 1 could also be done with -prune (don't know if there is a difference here) and was added in order to remove directories that I've put to the Trash as one, and not file by file...



[ Reply to This | # ]
find ?
Authored by: TonyT on Jun 19, '07 01:41:46PM

Thanks, I'll be adding this tonight!



[ Reply to This | # ]
find ?
Authored by: TonyT on Jun 20, '07 09:03:49PM
Couldn't get it to work in crontab, but I was successful id creating a launchd LaunchAgent. Great tip, nice and simple. No need for a program or long script. Thanks!

If interested, the launchd script is:

<?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>Disabled</key>
<true/>
<key>Label</key>
<string>com.tony.DeleteTrash7DaysOld</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/find</string>
<string>/Users/Tony/.Trash</string>
<string>-mindepth</string>
<string>1</string>
<string>-maxdepth</string>
<string>1</string>
<string>-newerat</string>
<string>-not</string>
<string>7 days ago</string>
<string>-delete</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceDescription</key>
<string>DeleteTrash7DaysOld</string>
</dict>
</plist>


[ Reply to This | # ]
find ?
Authored by: Soliman on Jun 21, '07 03:06:37AM

Nice too, though I'm surprised it did not work in cron :(

---
--
Sylvain



[ Reply to This | # ]
find ?
Authored by: TonyT on Jun 23, '07 07:14:58AM

Not sure why I couldn't get cron to work. It should have, but while trying to figure out the problem I leaned that Apple has depreciated cron since 10.4 in favor of launchd (a google or wiki will give background on this). Lingo, a nice freeware app, is helpful in writing launchd playlists. One advantage of using launchd over cron is that I can specify RunAtLoad (good for me as I have a laptop that I don't keep running 24/7)



[ Reply to This | # ]
find ?
Authored by: TonyT on Jun 23, '07 07:08:09AM

I noticed an error.

Replace:
<string>-newerat</string>
<string>-not</string>
<string>7 days ago</string>

With:
<string>-not</string>
<string>-newerat</string>
<string>7 days ago</string>



[ Reply to This | # ]
find ?
Authored by: maxbook on Jun 21, '07 09:21:36PM

wow. that's great.
i an really new to such stuff and i don't know what usr/bin/find is about? can you explain it to me?



[ Reply to This | # ]
find ?
Authored by: TonyT on Jun 23, '07 07:20:14AM

find is a UNIX command locate in the usr/bin/ directory. When running cron or launchd you need the absolute path, hence usr/bin/find. To learn more about find, enter "man find" in Terminal



[ Reply to This | # ]
find ?
Authored by: TonyT on Jul 02, '07 08:51:59PM

My trashed folders weren't deleting. It looks like find is changing the access time. changing -newerat to -newermt fixed that problem, but I guess if I trash a file without modifying it that it will get deleted sooner than anticipated.



[ Reply to This | # ]
find ?
Authored by: Soliman on Jul 03, '07 12:04:07PM
This is strange, for me it works flawlessly and a ls -latu .Trash/ shows that the access time of my Trashed files did not change... could the problem be related to the launchd trick ? What happens if you just type the command in a Terminal ? (check access times before and after, do they change ?).

---
--
Sylvain

[ Reply to This | # ]

find ?
Authored by: TonyT on Jul 03, '07 05:31:09PM

Same at the command line:

$ ls -latu
drwxr-xr-x 2 Tony Tony 68 Jul 3 20:26 untitled folder 2

/usr/bin/find /Users/Tony/.Trash -mindepth 1 -maxdepth 1 -not -newerat '7 days ago' -delete

$ ls -latu
drwxr-xr-x 2 Tony Tony 68 Jul 3 20:29 untitled folder 2

I'm running OS X 10.4.10 on an Intel MacBooh



[ Reply to This | # ]
find ?
Authored by: Soliman on Jul 04, '07 01:36:39AM
Ok, I finally got it : for me it works because find doesn't change the atime of files but changes that of directories !!!

The solution ? Change -maxdepth 1 to -prune, which gives :

/usr/bin/find /Users/[blabla]/.Trash -mindepth 1 -prune -not -newerat '3 days ago' -delete :)

---
Sylvain

[ Reply to This | # ]

find ?
Authored by: TonyT on Jul 04, '07 12:47:27PM

I had already tried -prune without success:

$ ls -latu
drwxr-xr-x 2 Tony Tony 68 Jul 4 15:39 untitled folder 2

$ /usr/bin/find /Users/Tony/.Trash -mindepth 1 -prune -not -newerat '7 days ago' -delete

$ ls -latu
drwxr-xr-x 2 Tony Tony 68 Jul 4 15:43 untitled folder 2

-newermt seems to be my only solution.

What ver of OS X are you running?



[ Reply to This | # ]
find ?
Authored by: Soliman on Jul 05, '07 01:20:51AM
I run OSX 10.4.10, however if I didn't notice the problem it is probably because I didn't have any directory in my Trash, only "flat" files (and for them no access time change)...

To solve the directories problem something like the following might work :
/usr/bin/find -d .Trash -mindepth 1 \( -type d -and -empty \) -or \( -not -newerat '3 days ago' \) -delete

But it doesn't seem to work as I expected (-or problem ?), whereas separating the two commands does what it should...

---
Sylvain

[ Reply to This | # ]

find ?
Authored by: Soliman on Jul 05, '07 09:02:26AM
Actually I discovered that the problem is caused by -delete so changing it to use rm seems ok.

Here is my new crontab entry :
/usr/bin/find /path/to/.Trash -mindepth 1 -prune -not -newerat '7 days ago' -exec /bin/rm -Rfv {} \;

DISCLAIMER: use rm -Rf at your own risk ;)

---
Sylvain

[ Reply to This | # ]