Automator 未正确过滤最近 7 天内修改的文件
Automator Not Properly Filtering Files Modified Within Last 7 Days
我正在尝试自动执行每周备份我的开发文件的过程。我想自动备份文件,筛选所有文件,删除最近7天内未修改的文件,但保留文件夹结构。例如,我将有许多名为 index.js 的文件,所以为了知道它们属于哪里,我希望保持文件夹结构,并且如果文件在上次修改后保留在其正确的文件夹中7天。到目前为止,我的流程是
- 复制包含所有开发文件的整个文件夹
这没问题。它复制所有 29K 文件。下一步是获取文件夹中的所有内容并对其进行过滤。
获取指定的Finder项目(刚刚复制的文件夹)
获取文件夹内容(对找到的每个子文件夹重复)
马上,我有一个问题。当获取文件夹内容并检查“为找到的每个子文件夹重复”时,大约有 8,000 个文件丢失。
我似乎无法弄清楚是什么原因造成的或如何解决这个问题。
如果我忽略它并继续,我的下一步就是过滤掉这些项目。我想删除过去 7 天内未修改的项目,因为我想保留文件夹结构,所以我想确保该项目不是文件夹
- 筛选查找器项目
设置为查找最后修改日期不在最近 7 天内的文件(这应该抓取所有最近未修改的文件)
过滤查找器项目
现在我过滤这些结果并确保抓取所有相同的文件但没有文件夹
将 Finder 项目移至废纸篓
- 最后,这些在过去 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
,这是备份文件夹的默认路径。
我正在尝试自动执行每周备份我的开发文件的过程。我想自动备份文件,筛选所有文件,删除最近7天内未修改的文件,但保留文件夹结构。例如,我将有许多名为 index.js 的文件,所以为了知道它们属于哪里,我希望保持文件夹结构,并且如果文件在上次修改后保留在其正确的文件夹中7天。到目前为止,我的流程是
- 复制包含所有开发文件的整个文件夹
这没问题。它复制所有 29K 文件。下一步是获取文件夹中的所有内容并对其进行过滤。
获取指定的Finder项目(刚刚复制的文件夹)
获取文件夹内容(对找到的每个子文件夹重复)
马上,我有一个问题。当获取文件夹内容并检查“为找到的每个子文件夹重复”时,大约有 8,000 个文件丢失。 我似乎无法弄清楚是什么原因造成的或如何解决这个问题。
如果我忽略它并继续,我的下一步就是过滤掉这些项目。我想删除过去 7 天内未修改的项目,因为我想保留文件夹结构,所以我想确保该项目不是文件夹
- 筛选查找器项目
设置为查找最后修改日期不在最近 7 天内的文件(这应该抓取所有最近未修改的文件)
过滤查找器项目
现在我过滤这些结果并确保抓取所有相同的文件但没有文件夹
将 Finder 项目移至废纸篓
- 最后,这些在过去 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
,这是备份文件夹的默认路径。