Как вы скачиваете все файлы, используя Fetch и applecript? - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть следующий скрипт (измененный для удаления любой личной информации).

-- This line is for testing.
set the clipboard to "1234567890"

set loginName to "username"
-- Password is stored in KeyChain (you need to do manually). 

-- Create Remote path
set folderNumber to the clipboard as string
set subdir1 to character 1 of folderNumber
set subdir2 to character 2 of folderNumber

set remotePath to "/files/" & subdir1 & "/" & subdir2 & "/" & folderNumber

-- Create Local path
set homeFolder to (path to home folder) as string
set localPath to homeFolder & "LOCALSTORAGE" as string
set localStorage to localPath & ":" & folderNumber & ":" as string

-- Create Local file
tell application "Finder"
    try
        make new folder at localPath with properties {name:folderNumber}
    on error e number n
        -- Do nothing.  
    end try
end tell

-- Connect to FTP
tell application "Fetch"
    activate
    set tWindow to make new transfer window at beginning with properties {hostname:"ftpServerAddress", username:loginName, initial folder:remotePath}

    tell window tWindow
        download every remote item to beginning of alias localStorage
        close window
    end tell

    quit
end tell

-- Open folder
tell application "Finder"
    open localStorage
end tell

Когда я запускаю скрипт, следующая строка завершается ошибкой.

download every remote item to beginning of alias localStorage

Я получаю следующую ошибку:

error "Fetch получил ошибку: не удается получить каждый удаленный элемент окна (идентификатор окна передачи 232280960)."номер -1728 с каждого удаленного элемента окна (идентификатор окна передачи 232280960)

Кто-нибудь знает, что означает ошибка или как ее исправить?Я попробовал сайт Fetch без особой удачи.Кстати, «Fetch» ​​- это FTP-клиент Fetch.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Сначала вы должны проверить, что remotePath, который вы генерируете, действительно существует (например, добавив оператор log, такой как log tWindow's remote items и просмотрев в журнале событий редактора сценариев, смог ли он их получить) .

Если путь правильный, я думаю, проблема в том, что вы используете команду download со ссылкой на объект списка (every remote item...). В документации команда ожидает спецификатор одного элемента:

загрузить спецификатор: удаленный файл, удаленная папка, ярлык или URL для загрузки

Вот почему вам нужно перебирать предметы. Фрагмент ниже отлично работает для меня:

-- my settings for testing
set theHost to "ftp.fetchsoftworks.com"
set loginName to "anonymous"
set remotePath to "/example/"
set localStorage to ((path to home folder) as text) & "LOCALSTORAGE:1234567890:"

-- Connect to FTP
tell application "Fetch"
    activate
    set tWindow to make new transfer window at beginning with properties {hostname:theHost, username:loginName, initial folder:remotePath}
    set localStorage to (localStorage as alias)
    repeat with theItem in tWindow's remote items
        try
            download theItem to localStorage
        end try
    end repeat

    close tWindow
    quit
end tell
1 голос
/ 17 февраля 2012

Нет проблем с передачей списка на download.Но есть две проблемы с исходным кодом:

tell window tWindow
    download every remote item to beginning of alias localStorage
    close window
end tell
  1. Блок tell направляет вложенные команды в общий объект window, а не transfer window, и общий *Объект 1009 * не содержит удаленных элементов.
  2. Параметр to команды download должен быть псевдонимом, а не местом вставки (например, beginning of ...).

Thisдолжно работать:

tell tWindow
    download every remote item to alias localStorage
    close
end tell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...