Automator 未正确过滤最近 7 天内修改的文件

Automator Not Properly Filtering Files Modified Within Last 7 Days

我正在尝试自动执行每周备份我的开发文件的过程。我想自动备份文件,筛选所有文件,删除最近7天内未修改的文件,但保留文件夹结构。例如,我将有许多名为 index.js 的文件,所以为了知道它们属于哪里,我希望保持文件夹结构,并且如果文件在上次修改后保留在其正确的文件夹中7天。到目前为止,我的流程是

这没问题。它复制所有 29K 文件。下一步是获取文件夹中的所有内容并对其进行过滤。

马上,我有一个问题。当获取文件夹内容并检查“为找到的每个子文件夹重复”时,大约有 8,000 个文件丢失。 我似乎无法弄清楚是什么原因造成的或如何解决这个问题。

如果我忽略它并继续,我的下一步就是过滤掉这些项目。我想删除过去 7 天内未修改的项目,因为我想保留文件夹结构,所以我想确保该项目不是文件夹

因此,如果我在 Automator 最初获取文件夹内容时忽略了最初丢失的 8,000 个文件,并且 运行 它无法按预期工作。它确实删除了很多文件,但是在过去的7天内没有修改过的大量文件仍然存在,我不明白为什么有些文件被删除而有些文件被留下。我不确定我的过程中是否存在缺陷或者我在这里遗漏了什么。有人可以指出我想要实现的目标的正确方向吗?

这是一个完整的 AppleScript 解决方案,您可以在脚本编辑器中将此代码另存为应用程序

set mainFolder to choose folder with prompt "PLEASE CHOOSE YOUR SOURCE FOLDER TO BACKUP"
set backupFolder to choose folder with prompt "PLEASE CHOOSE YOUR BACKUP DESTINATION FOLDER"
set theDate to (current date) - (7 * days)

tell application "Finder"
    set allFiles to entire contents of folder mainFolder as alias list
    try
        duplicate allFiles to folder backupFolder
    end try
    set allFiles2 to every file of entire contents of folder backupFolder
end tell

repeat with i from 1 to count of allFiles2
    set thisFile to item i of allFiles2
    if modification date of thisFile is less than theDate then
        tell application "Finder"
            delete thisFile
        end tell
    end if
end repeat

if [[ ! -d ~/Downloads/backup ]]; then
  mkdir ~/Downloads/backup
fi
cd ~/Downloads/temp/
find . -type f -newermt '7 days ago' -exec rsync -R {} ~/Downloads/backup \;
# You can change this -----^^^^ to hours as well!

添加上面的代码,如图所示。你完成了!

代码的工作原理:

首先,我是反过来做的。在您的工作流程中,您复制所有文件然后过滤它们。在此工作流程中,我先 过滤文件然后复制它们。

代码的第一行主要是检查主目录的下载中是否没有备份目录

第二行;如果第一行为真,则创建备份文件夹。

第三行结束本次检查

第4行查找最近7天内('7天前')。对于符合此条件的每个文件,我使用 rsync 将它们复制到 ~/Downloads/backup,这是备份文件夹的默认路径。