AppleScript文件夹操作移动大文件失败求助:跨卷多文件时序问题?
解决Folder Action跨卷大文件批量移动失败的问题
嘿,我之前处理过类似的Folder Action跨卷文件操作坑,咱们来一步步搞定它!
问题核心分析
你的脚本在单文件/小文件场景下正常,但跨卷大文件(500-1500MB)且数量>1时移动失败,根源大概率是:
Folder Action默认是文件开始复制到文件夹时就触发脚本,而不是等复制完成。跨卷大文件复制需要较长时间,脚本执行移动步骤时,文件还处于“正在写入”的锁定状态,系统会拒绝移动操作;单文件或小文件复制速度快,刚好在脚本执行到移动步骤前完成了写入,所以没触发问题。
解决方案:先等文件复制完成,再执行后续操作
修改你的Folder Action脚本,先添加“等待文件写入完成”的逻辑,再执行创建文件夹、移动、重命名步骤。下面是调整后的AppleScript示例:
on adding folder items to this_folder after receiving added_items repeat with theItem in added_items -- 关键:等待文件复制完成(检查文件是否可写,锁定状态会抛出错误) set fileReady to false repeat until fileReady try -- 尝试以写入权限打开文件,成功则说明复制完成 set tempRef to open for access theItem with write permission close access tempRef set fileReady to true on error -- 文件还在复制,等待2秒后再检查 delay 2 end try end repeat -- 以下是你的原有逻辑,替换成你需要的子文件夹/文件名规则 set fileInfo to info for theItem set originalFileName to name of fileInfo -- 示例:生成子文件夹名(取文件名前6位) set targetFolderName to text 1 thru 6 of originalFileName set targetFolderPath to this_folder as string & targetFolderName & ":" -- 创建子文件夹(用shell命令更稳定) do shell script "mkdir -p " & quoted form of POSIX path of targetFolderPath -- 跨卷移动文件(shell的mv比AppleScript原生move更可靠) try do shell script "mv " & quoted form of POSIX path of theItem & " " & quoted form of POSIX path of targetFolderPath on error errMsg number errNum -- 可选:添加错误日志,方便排查问题 do shell script "echo '[" & (current date as string) & "] 移动失败:" & errMsg & " | 文件:" & originalFileName & "' >> ~/FolderActionErrors.log" -- 跳过当前出错的文件,继续处理下一个 continue repeat end try -- 重命名子文件夹和文件(替换成你的规则) set newFolderName to targetFolderName & "_processed" set newFileName to originalFileName & "_final" set newFolderPath to this_folder as string & newFolderName & ":" do shell script "mv " & quoted form of POSIX path of targetFolderPath & " " & quoted form of POSIX path of newFolderPath do shell script "mv " & quoted form of POSIX path of (newFolderPath & originalFileName) & " " & quoted form of POSIX path of (newFolderPath & newFileName) end repeat end adding folder items to
额外优化建议
- 磁盘空间检查:跨卷移动本质是“复制+删除原文件”,大文件操作前可以检查目标卷剩余空间,避免因空间不足失败。
- 并行处理限制:如果批量文件太多,可以添加并发限制(比如一次只处理2个文件),避免系统资源被占满。
- 日志记录:保留错误日志和操作日志,方便后续排查异常情况。
内容的提问来源于stack exchange,提问作者calisprontix
相关产品推荐
相关产品推荐

