1

我正在编写一个脚本,该脚本将文件夹从 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

4 回答 4

1

第一个脚本将删除在重复和删除命令之间添加的项目。但我想不出第二种方法不起作用的任何情况:

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/*"
于 2013-06-13T20:34:41.883 回答
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
于 2013-06-14T13:37:42.090 回答
0

不要让它比它需要的更复杂。

Duplicate 和 Delete 都可以接受列表作为直接参数。不需要任何重复循环。请注意,这与 Lauri 建议的格式相同,只是使用 OP 的示例进行了格式化。给她点赞。

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
于 2013-06-14T16:10:36.613 回答
-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而不是duplicateand delete

我们之前遇到了一些奇怪的问题move,所以从那以后我坚持使用duplicateand delete

谢谢大家!这个网站很有帮助!

于 2013-06-14T11:24:17.053 回答