Сценарий, который вам нужен, я думаю, таков:
on adding folder items to thisFolder after receiving filelist
set droppedFile to first item of filelist
tell application "System Events"
tell every desktop
set picture to droppedFile
end tell
end tell
end adding folder items to
(я пропустил бит 'Alarm', так как не был уверен, какой в этом смысл).
Чтобы использовать этот сценарий, скопируйте его в редактор сценариев, сохраните его в папке ~/Library/Scripts/Folder Action Scripts/
, затем откройте апплет «Настройка действий папки». Добавьте нужную папку слева и выберите файл, который вы только что сохранили справа. Это должно выглядеть примерно так: ... где галочка слева показывает, что действия с папкой включены для папки (которую я назвал «тестовой папкой») и сценария (который я назвал'FADtop.scpt') прилагается.
Перетащите изображение в папку, и оно должно просто работать.
Как правило, не пишите в Finder, если вам абсолютно не нужно;всегда используйте системные события. Finder - загруженное приложение, и его скрипты могут привести к сбоям в работе системы. А также попытайтесь избежать этого шаблона проектирования:
(* Don't do this! *)
repeat
(* test for something *)
delay x
end
Команда delay
не особенно ресурсоэффективна. Если вы действительно хотите использовать систему опроса для тестирования какого-либо события, часто лучше создать отдельное приложение с обработчиком on idle
. Таким образом, вы дадите системе разбудить и перевести сценарий в режим ожидания со значительным улучшением производительности.
РЕДАКТИРОВАТЬ
Поскольку действия с папками, по-видимому, не работают при сбросе ftp наудаленные диски, вот достаточно эффективный подход для опроса папок. Сохраните следующий сценарий как приложение, которое остается открытым (выберите «Приложение» в качестве типа файла и установите флажок «оставаться открытым»). Затем запустите приложение и оставьте его работать в фоновом режиме.
property dateOfLastFileChosen : missing value
property targetFolder : "/Volumes/photo/FRONT CAM 1/20190929/images"
property idleTime : 300 -- 300 seconds is five minutes
on run
end run
on idle
tell application "System Events"
if exists folder targetFolder then
if dateOfLastFileChosen is missing value then
set recentFiles to every file of folder targetFolder whose visible is true
else
set recentFiles to every file of folder targetFolder whose modification date > dateOfLastFileChosen and visible is true
end if
set newFile to my mostRecentFileOfList(recentFiles)
if newFile is not missing value then
set dateOfLastFileChosen to modification date of newFile
tell every desktop
set picture to (POSIX path of newFile)
end tell
end if
end if
end tell
return idleTime -- check every 5 minutes (300 seconds)
end idle
on mostRecentFileOfList(fileList)
set maxDateObj to missing value
repeat with thisFile in fileList
if maxDateObj is missing value then
set maxDateObj to contents of thisFile
else if modification date of thisFile is greater than modification date of maxDateObj then
set maxDateObj to thisFile
end if
end repeat
return maxDateObj
end mostRecentFileOfList