我正在编写一个脚本,将afp共享中的文件夹复制到本地文件夹,然后使用这些文件夹执行所有类型的操作。 (它在复制后删除原始文件夹)
此代码工作正常:
tell application "Finder"
duplicate every folder of folder afpFolder to localFolder with replacing
delete every folder of folder afpFolder
end tell
我的问题我们的员工会定期向afpFolder
定期添加新文件夹。我的脚本每10秒运行一次(使用LaunchAgents),因为它需要尽可能多地处理重复的数据。
我的问题是:当脚本复制并删除文件夹时会发生什么?完全当有人向afpFolder
添加新文件夹时会发生什么?
脚本是否仅删除afpFolder
在开始运行 时的内容,或者是否会删除其中一个新创建的文件夹而不重复?
我还想过用列表制作东西。例如:
set folderList to {}
tell application "Finder" to set folderList to every folder of afpFolder
duplicate folderList to localFolder
delete folderList
(这可能不会这样)
有人可以帮我解答一下这个问题吗?
我可以使用上面的代码来复制和删除吗?或者我不得不担心关于脚本删除脚本运行时创建的文件夹,而不重复它们?
如果上面的代码会导致问题,你能帮我解决一下这个列表的问题吗?
答案 0 :(得分:1)
第一个脚本将删除在duplicate和delete命令之间添加的项目。但我无法想到第二种方法不起作用的任何情况:
tell application "Finder"
set l to items of ((POSIX file "/private/tmp/test") as alias)
duplicate l to desktop
delete l
end tell
您也可以尝试使用mv或rsync:
do shell script "mv /path/to/afp_folder/* /path/to/local_folder/"
do shell script "rsync -a /path/to/afp_folder/ /path/to/local_folder/
rm -r /path/to/afp_folder/*"
答案 1 :(得分:0)
你的回答@John Alarik的代码是低效的,我认为在某些方面它甚至不起作用。请不要把它当作批评,因为我可以看到你正在努力找到一个解决方案,这是获得帮助的正确方法。所以我认为我会帮助你的代码。
首先,您似乎正在对字符串,别名和文件规范进行许多不必要的转换。此外,它们中的一些在您使用它们的上下文中是不正确的,并且可能会导致错误。你的重复陈述过于复杂。
试试这段代码。它的工作方式与您想要的相同,但更清晰,不应有任何错误。我希望它有所帮助。祝你好运。
set afpFolder to "examplepath:path:folder:" as alias
set localFolder to "examplepath:path:folder:" as alias
tell application "Finder"
set folderList to folders of afpFolder
repeat with aFolder in folderList
duplicate aFolder to localFolder with replacing
delete aFolder
end repeat
end tell
答案 2 :(得分:0)
不要让它变得比它需要的更复杂。
Duplicate和Delete都可以接受列表作为直接参数。不需要任何重复循环。请注意,这与Lauri建议的格式相同,只是使用OP的示例格式化。给她upvote。
set afpFolder to "examplepath:path:folder:" as alias
set localFolder to "examplepath:path:folder:" as alias
tell application "Finder"
set folderList to folders of afpFolder
duplicate folderList to localFolder
delete folderList
end tell
答案 3 :(得分:-1)
更新:请参阅@ regulus6633关于此代码的帖子!
感谢所有帮助。与此同时,即使没有您的答案,我也可以解决我的问题,因为我找到了制作和处理列表的良好代码片段。
这是最终的解决方案,即使在脚本运行时将新文件夹复制到afpFolder也能正常工作。
tell application "Finder"
set afpFolder to "examplepath:path:folder:" as alias
set localFolder to "examplepath:path:folder:" as string
set folderList to every folder of folder afpFolder
set i to 1
repeat the count of folderList times
set afpUniqueFolder to (item i of folderList) as string
duplicate afpUniqueFolder to localFolder
delete afpUniqueFolder
set i to i + 1
end repeat
end tell
我知道还有一个名为move
的命令,而不是duplicate
和delete
。
我们之前遇到过move
的一些奇怪问题,所以从那以后我坚持duplicate
和delete
。
感谢大家!这个网站非常有帮助!