Pretty new scripter so sorry if this is lame. As part of a larger script, i’m trying to delete old files out of a folder. I thought this would work but it errors out because, assumedly, it’s deleting the very files it’s using to count. i can’t imagine this task isn’t a pretty common one though so i was hoping someone out there had a solution.
tell application "Finder"
tell MYfolder
set filecount to count of files
repeat with i from 1 to filecount
set currentfile to item i
if (current date) - (modification date of currentfile) is greater than 172800 then
delete currentfile
end if
end repeat
end tell
end tell
any help or general mocking of my ignorance is more than welcome. thanks.
i didn’t count backwards cause i’m an idiot and didn’t know you could. someone might have a slicker way but your way is perfect. thanks a bunch and sorry for being the slow kid in class.
There’s no way it’s idiotic not to know that (did I say that right? I meant it in the best possible sense) - if you’re new to scripting it’s not at all obvious that you can do that…
You may not get the results you are looking for with your code because you count the files but then you reference the items. Items encompass both files and folders. You’re better off first getting the file list and then iterating through that. Also, you’ll save some time by getting the current date only once and assigning it to a variable:
Then again, depending on which OS version you’re running, you can:
tell application "Finder"
set cutoffdate to (current date) - 172800
delete every file of folder "Macintosh HD:My Folder" whose modification date is less than cutoffdate
end tell
Again… with a UNIX backend, you can do shell script that is much faster…:
cd into the desired directory and:
find . -mtime +30 -exec rm {};
You can use the -print option to see what would be deleted if you’d rather. Beware… this is powerful and can step through directories recursively without having to prompt for responses, etc.