【问题标题】:Automator Not Properly Filtering Files Modified Within Last 7 DaysAutomator 未正确过滤过去 7 天内修改的文件
【发布时间】:2018-07-04 07:40:23
【问题描述】:

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

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

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

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

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

马上,我有一个问题。获取文件夹内容并检查每个子文件夹的重复时发现大约 8,000 个文件丢失。 我似乎无法弄清楚是什么导致了这个问题或如何解决这个问题。

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

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

  • 过滤查找器项目

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

  • 将 Finder 项目移至废纸篓

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

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

【问题讨论】:

  • 文件夹中find . -type d | wc -lfind . -type f | wc -l的输出是什么?

标签: macos filesystems automator


【解决方案1】:

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 days ago')内所有修改时间(-newermt)的文件。对于符合此条件的每个文件,我使用 rsync 将它们复制到 ~/Downloads/backup,这是备份文件夹的默认路径。

【讨论】:

  • 感谢您的输入,我最大的问题是,我想保留文件夹结构,这就是我的 Automator 流程如此糟糕的原因。例如,我可能有来自不同文件夹的多个 index.html 文件,如果它们都被复制到同一个备份文件夹中,如果不实际打开文件,我将不知道它们属于哪里。
  • 但此代码支持文件夹结构。它将 temp/some/project/index.html 复制到 backup/some/project/index.html
  • 如果我误解了你,让我纠正它。您的意思是您需要查看正在同步哪些文件?
  • 哦,你知道吗,我读错了代码。让我尝试运行这个脚本。谢谢您的帮助。我认为你是对的,我认为这会很好。我唯一要更改的是将备份放在一个文件夹中,该文件夹是当前日期的任何格式,以破折号分隔的数字格式,因此今天的文件夹将是 7-9。我会运行这个,我只需要考虑这样做。谢谢你的帮助!!!
  • 欢迎您。您也可以尝试添加此位; date +%-m-%-d-%y 为您的代码设置您现在需要的日期。我还没有测试过。虽然我稍后可以帮你。
【解决方案2】:

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

【讨论】:

  • 抱歉延迟响应,所以这会保留文件夹结构吗?比如我在Folder1中有2个文件,文件1要保留,文件2要删除,文件2会被删除,文件1会和文件夹一起保留吗?
  • 那是我的意图:-)。对脚本进行测试,看看你喜欢它
  • 太棒了!谢谢你。我得再试一次。因为它实际上是循环遍历所有内容并且有大约 28,000 个文件需要一分钟,但这将是一个计划任务,发生在我睡着的时候,所以这无关紧要。我会给它另一个测试运行。谢谢!
  • 要编辑脚本,因为如果您使用的文件太多...... Finder 应用程序并不是查找文件的最有效方式
  • 哦,谢谢!我非常感谢。我确实在一个较小的文件夹上对其进行了测试,它就像一个魅力,我唯一想改变的是不必选择文件夹,只需告诉它自己选择下载文件夹,然后选择我的备份文件夹正在按数字顺序获取当前月份和日期并创建一个新文件夹,因此它将创建一个新文件夹 7-9 并将文件复制到该文件夹​​。谢谢大家的帮助!!!!!!
猜你喜欢
  • 2012-04-16
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
相关资源
最近更新 更多