Applescript处理脚本运行时创建的新文件夹吗?

时间:2013-06-13 18:17:13

标签: list duplicates applescript

我正在编写一个脚本,将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

(这可能不会这样)

有人可以帮我解答一下这个问题吗?

我可以使用上面的代码来复制和删除吗?或者我不得不担心关于脚本删除脚本运行时创建的文件夹,而不重复它们?

如果上面的代码会导致问题,你能帮我解决一下这个列表的问题吗?

4 个答案:

答案 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的命令,而不是duplicatedelete

我们之前遇到过move的一些奇怪问题,所以从那以后我坚持duplicatedelete

感谢大家!这个网站非常有帮助!