applescript、文件夹操作、移动复制的项目失败、计时问题?
请帮忙,我想不出解决办法 文件夹操作旨在为复制到文件夹中的每个文件执行此操作:applescript、文件夹操作、移动复制的项目失败、计时问题?,applescript,move,timing,finder,Applescript,Move,Timing,Finder,请帮忙,我想不出解决办法 文件夹操作旨在为复制到文件夹中的每个文件执行此操作: 派生子文件夹名称和新文件名 创建子文件夹 将文件移动到其中 重命名子文件夹和文件 文件从不同的卷复制,通常为500…1500 MB 问题:如果文件太大且数量为>1 它们是从不同的卷复制的 复制时,脚本工作正常:小文件,或来自同一卷,或仅一个文件 在一次测试中,所有200个别名都得到了正确处理,但512个别名中只有23个得到了正确处理。这不是问题,添加的项目数通常为50。但这可能有助于解决这一问题 我怀疑是时间问题,但
>1
它们是从不同的卷复制的
复制时,脚本工作正常:小文件,或来自同一卷,或仅一个文件
在一次测试中,所有200个别名都得到了正确处理,但512个别名中只有23个得到了正确处理。这不是问题,添加的项目数通常为50
。但这可能有助于解决这一问题
我怀疑是时间问题,但所有使用大量的超时来修复它的尝试都没有成功
脚本(注意-在尝试之前,请将do shell脚本
行中的正则表达式设置为可行的):
在收到添加的\u项目后将文件夹项目添加到此\u文件夹
对添加的\u项中的\u项重复此操作
超时3600秒
告诉应用程序“查找器”
若项目的种类不是“文件夹”,那个么
重复--等待项目被复制。感谢WWW.com上的原创编码器。
将{size:fileSize,busy status:busy}设置为(_项的信息))
如果不忙且(文件大小大于0),则退出“重复”
延迟1
结束重复
超时600秒
将新文件夹名称设置为执行shell脚本“echo”&(项目名称)
&“'sed-E's/llooongRegex/replace/g'”
将new_item_name设置为执行shell脚本“echo”&(_item的名称)
&“'sed-E's/otherRegex/replace/g'”
将new_folder设置为(在此_folder中创建属性为{name:(new_folder_name&“-temp”)}的新文件夹,作为别名--“-temp”,以防新文件夹和文件具有相同的名称
将文件项目移动到文件夹新文件夹--1)和(文件大,用0.5…1.5GB测试)和(从不同卷复制))==>时间问题?
将(获取新\u文件夹内容的第一项)的名称设置为新\u项\u名称
将新文件夹的名称设置为新文件夹的名称
结束超时
如果结束
结束语
结束超时
结束重复
结束将文件夹项目添加到
注意:文件夹操作是否足够频繁,以便标记?替换重复-等待项目被复制…
子句,使用一个简单的延迟60
,脚本工作。因此,这是一个时间问题
只要只有一个文件复制(一堆文件被删除)正在运行,等待目标文件夹停止按描述更改大小就可以工作。两次或更多的阻力下降,它又打嗝了(好话,@vadian!)
检查单个添加项目的大小是否保持不变时也是如此。请注意,热文件夹的任何变化(添加项目、创建文件夹、重命名文件夹)都会再次触发文件夹操作,这可能会导致一些小问题。是的,触发操作的数量可能是一个问题。但对于小文件,至少可以处理200个项目。
on adding folder items to this_folder after receiving added_items
repeat with the_item in added_items
with timeout of 3600 seconds
tell application "Finder"
if kind of the_item is not "Folder" then
repeat -- wait until item is copied. Thanks to original coder on the WWW.
set {size:fileSize, busy status:Busy} to (info for (the_item))
if not Busy and (fileSize is greater than 0) then exit repeat
delay 1
end repeat
with timeout of 600 seconds
set new_folder_name to do shell script "echo '" & (name of the_item) ¬
& "' | sed -E 's/llooongRegex/replace/g'"
set new_item_name to do shell script "echo '" & (name of the_item) ¬
& "' | sed -E 's/otherRegex/replace/g'"
set new_folder to (make new folder at this_folder with properties {name:(new_folder_name & "-temp")}) as alias -- "-temp" in case new folder and file will have the same name
move file the_item to folder new_folder -- <== fails if ((added_items >1) AND (files big, tested with 0.5…1.5GB) AND (copied from different volume)) ==> Timing issue?
set name of (first item of (get contents of new_folder)) to new_item_name
set name of new_folder to new_folder_name
end timeout
end if
end tell
end timeout
end repeat
end adding folder items to