Macos 是否删除超过30天的下载?
我正在尝试在automator中创建一个任务,如果~/下载中的文件超过30天,则将其移动到垃圾箱 我想让它每天运行 但它不工作,Finder只是挂起并停止响应,我不得不从活动监视器中强制退出它Macos 是否删除超过30天的下载?,macos,automation,applescript,automator,Macos,Automation,Applescript,Automator,我正在尝试在automator中创建一个任务,如果~/下载中的文件超过30天,则将其移动到垃圾箱 我想让它每天运行 但它不工作,Finder只是挂起并停止响应,我不得不从活动监视器中强制退出它 on run {input, parameters} tell application "Finder" set deleteFileList to (files of entire contents of folder alias "Macintosh HD:Users:Geo
on run {input, parameters}
tell application "Finder"
set deleteFileList to (files of entire contents of folder alias "Macintosh HD:Users:George:Downloads" whose modification date is less than ((get current date)) - 30 * days)
try
repeat with deleteFile in deleteFileList
delete deleteFile
end repeat
end try
end tell
return input
end run
如果Finder挂起,这可能是因为“整个内容”中的文件太多。可能是某些下载的项目由带有子文件夹/子文件夹的文件夹组成,。。。然后是太多的文件 相反,我建议您只查看下载文件夹的第一级:项目顶级:
Set DeleteFileList to every items of folder "Macintosh HD:Users:George:Downloads" whose modification date is less than ((get current date)) - 30 * days)
DeleteFileList的内容将由文件和文件夹组成,但我猜您希望删除完整的文件夹,而不仅仅是其中的文件。我会采取不同的方法,使用Automator中提供的一组操作,而不必使用AppleScript 以下工作流将完成您希望完成的任务 在自动化程序中创建新的工作流,添加以下操作:
- 获取指定的查找程序项
- 将下载文件夹添加到其中
- 获取文件夹内容
- []对找到的每个子文件夹重复此操作
- 筛选查找项
- 在以下位置查找文件:
- 以下所有情况都是正确的
- 上次修改日期不在最近30天内
- 以下所有情况都是正确的
- 在以下位置查找文件:
- 将查找器项目移动到垃圾箱
苹果公司的首选方法是使用
launchd
和launchctl
来安排这样的事情
要每天运行清理下载,我将执行以下操作:
~/Library/LaunchAgents/
- 示例:
作为包含以下内容的XML文件:com.me.cleanup.downloads.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.me.cleanup.downloads</string> <key>ProgramArguments</key> <array> <string>/Applications/Cleanup Downloads.app/Contents/MacOS/Application Stub</string> </array> <key>RunAtLoad</key> <false/> <key>StartCalendarInterval</key> <array> <dict> <key>Hour</key> <integer>10</integer> <key>Minute</key> <integer>00</integer> </dict> </array> </dict> </plist>
注:参见终端中的
launchd
和launchctl
手册页,例如man launchctl
或者使用具有GUI的第三方实用程序,例如:
注意:我与Lingon X的开发人员无关,但我是一位满意的客户
对您的AppleScript代码的一些评论: 无需使用
repeat
语句,只需使用:
move deleteFileList to trash
current date
命令在current application
下执行,而不是Finder
,因为Finder不理解current date
命令。因此,设置一个变量并在命令中使用该变量
set thisDate to get (current date) - 30 * days
... whose modification date is less than thisDate
现在,我并不是建议您在我提议的工作流上实际使用AppleScript,我只是指出代码中的一些问题。@theonlygusti,我已经更新了我的答案,以包括计划使用工作流应用程序的信息。我假设“[]重复每个…”意味着不重复找到的每个子文件夹?因此,@theonlygusti在Automator中创建一个新的应用程序工作流,添加以下操作:…:)是的,将其保存为应用程序。@Jere,是的,这当然是可能的,但是,我相信OP知道这一点,即使没有。。。在实施(可能)具有破坏性组件的任何解决方案之前,用户始终有责任确保适当的备份到位!例如,我有一台时间机器,每15分钟运行一次,我总是确保在测试可能执行预期/想要的操作之前,我当前已备份。就我个人而言,我通常不会实施任何批发删除我的主文件夹中的文件的自动解决方案,我通常手动管理@quiram,要解决您提到的问题,请在工作流的开头添加一个Run Shell脚本操作,并使用以下代码行:
touch-t$(日期-v-31d+%Y%m%d%H%m.00)~/Downloads/Foobar\u$(日期+%s000);sleep 3
然后在“获取指定查找项”操作的选项中,检查[√] 忽略此操作的输入复选框。这将创建一个虚拟文件,其修改日期为运行时的-31天,因此至少有一个文件的修改日期为运行时的30天以上。文件夹别名可以工作,但语法不好。文件夹
或(一个)alias
。还有一个快捷方式…的每个项目(下载文件夹的路径)
谢谢Vadian。“alias alias”是我的错误。我只是删除了它。
set thisDate to get (current date) - 30 * days
... whose modification date is less than thisDate