I have a security camera that FTPs a new folder everyday into a local iCloud folder on my home server. FYI, the real location of your iCloud Drive is within ~/Library/Mobile Documents, which is a package folder.
This storage process has not proved ideal since iCloud doesn’t handle automation very well. It works with Finder windows and Save dialogs, but background processes not so much. The result for me has been constant reminders that my iCloud drive is “full” despite deleting the bulk of folders. Most of the space never comes back and many times folders just “deleted” reappear.
Maybe adding another automated process to this soup is not going to help and may make things worse (will bird even notice when items are removed this way?), but what the hell. This script will delete files oldest first until the number of items it counted when it was called reaches the “keep” count (set to “5” here).
This may be attached to any folder, and items may be sent to the Trash or deleted immediately with rm.
but be aware that it does not send files to the Trash. They are removed with rm.
-- http://strawhousepig.net/ -- Number of items to keep. property keep : 5 -- Number of seconds until the script may run again (incase of runaway process adding to folder). property cycle : 10 -- plist to store time last run. property the_dom : "applescript.folderaction.trimfolder" -- Should items be deleted immediately (set to false) or sent to the Trash (set to true)? property trashit : true on adding folder items to this_folder after receiving added_items do_it(this_folder) end adding folder items to on run set this_folder to choose folder do_it(this_folder) end run on do_it(this_folder) set the_key to "epoch" set the_val to (do shell script "date '+%s'") if my read_array(the_dom, the_key, the_val, cycle) is true then return do shell script "defaults write " & the_dom & " " & the_key & " " & quoted form of the_val tell application "Finder" set _items to items of this_folder set _items to (sort _items by creation date) end tell if (count of _items) is greater than keep then try repeat until (count of _items) is equal to keep if trashit is true then delete item 1 of _items else do shell script "rm -R " & quoted form of POSIX path of (item 1 of _items as alias) end if set _items to rest of _items end repeat on error theErr number theNum if theNum is not -128 then display dialog theErr giving up after 60 end try end if end do_it on read_array(the_dom, the_key, the_val, cycle) try set last_run to (do shell script "defaults read " & the_dom & " " & the_key) on error -- Will error if there is nothing to read. return false end try if the_val - last_run is less than cycle then return true else return false end if end read_array