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

时间:2018-04-23 05:03:35

标签: macos filesystems automator

我正在尝试每周备份我的开发文件的过程自动化。我想自动备份文件,过滤所有文件,删除过去7天内未修改的文件,但保留文件夹结构。例如,我将有许多名为index.js的文件,所以为了知道它们属于哪里,我希望维护文件夹结构,并且文件保留在它的正确文件夹中,如果它已被修改过去7天到目前为止,我的过程一直是

  • 复制包含所有开发文件的整个文件夹

Automator settings showing the first step I have set is to Get Specified Finder Items which is the folder I want to copy and then to Copy Finder Items to the backup folder

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

  • 获取指定的Finder项目(刚刚复制的文件夹)

  • 获取文件夹内容(对找到的每个子文件夹重复)

29,303 Items inside of the folder that has been copied

Right off the bat, I have an issue. When Getting Folder Contents and checking Repeat For Each Subfolder Found around 8,000 files are missing.

马上,我有一个问题。获取文件夹内容并检查重复每个子文件夹时发现大约有8,000个文件丢失。 我无法弄清楚造成这种情况的原因或解决方法。

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

  • 过滤查找器项
  • 设置为查找上次修改日期不在过去7天内的文件(这应该抓取最近未修改过的所有文件)

  • 过滤查找器项目

  • 现在我过滤掉这些结果并确保获取所有相同的文件但没有文件夹

  • 将Finder项目移至废纸篓

  • 最后,这些在过去7天内未被修改且不是文件夹的项目将被移至回收站。

因此,如果我忽略了Automator最初获取文件夹内容时丢失的初始8,000个文件,并运行此文件,则无法按预期工作。它确实删除了很多文件,但是遗留了大量过去7天内没有修改过的文件,我无法弄清楚为什么有些文件被删除而有些文件被删除了。我不确定我的流程中是否存在缺陷或我在这里缺少什么。有人能指出我正在努力实现的目标吗?

2 个答案:

答案 0 :(得分:4)

Paste the code here

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!

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

代码的工作方式:

首先,我以其他方式做到了。在工作流程中,您将复制所有文件,然后对其进行过滤。在此工作流程中,我首先过滤了文件,然后将其复制。

代码的

第一行基本上检查主目录的下载中是否有备份目录。

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

第三行结束此检查。

第4行查找最近7天(“ 7天前”)内所有时间已修改(-newer mt )的文件。对于符合此条件的每个文件,我使用 rsync 将它们复制到~/Downloads/backup,这是备份文件夹的默认路径。

答案 1 :(得分:3)

这是一个完整的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