4

Я очень новичок в AppleScript. Я часто делюсь файлами со своего локального компьютера в папку Dropbox.

Например:

From: ~/Work/hello.txt
To: ~/Dropbox/zzz_ShareMe/hello.txt

cp ~/Work/hello.txt ~/Dropbox/zzz_ShareMe/ # or, just copy files from finder

Я погуглил про AppleScript и придумал рабочий процесс, который копирует ТОЛЬКО ОДИН элемент, но как мы можем выбрать несколько файлов и скопировать их в Dropbox с помощью назначенной горячей клавиши (ctrl-alt-d)?

Содержимое Run NSAppleScript приведено ниже:

# Note: we should have ~/Dropbox/zzz_ShareMe folder
#
on alfred_script(q)
tell application "Finder"
    set source to (POSIX path of (the selection as alias))
    do shell script "cp -r" & space & quoted form of POSIX path of source & space & "~/Dropbox/zzz_ShareMe"

end tell
end alfred_script

Я поделился своим предварительным рабочим процессом здесь.

Этот рабочий процесс работает для одного файла. Если я выбираю файл в Finder, ctrl-alt-d копирует файл в ~/Dropbox/zzz_ShareMe/ , однако, если я выбрал несколько файлов и использовал эти горячие клавиши, ничего не копируется.

Как мы можем решить эту проблему.

Помощь будет оценена.

Ссылки по теме:

http://www.packal.org/workflow/move
http://www.packal.org/workflow/copymove
https://www.alfredforum.com/topic/4195-move-selected-finder-item/

Обновление Я попробовал другой скрипт, но он все равно не работает.

Обязательное задание:

  1. выбрать несколько файлов в Finder
  2. Ctrl-Alt-D
  3. он должен скопировать все файлы в ~/Dropbox/zzz_ShareMe/ .

Новый скрипт приведен ниже:

on alfred_script(q) 

tell application "Finder"

set source to selection

end tell

if (count of source) is greater than 1 then

set fileList to every item of source

repeat with source in fileList

doMove(source, q)

end repeat

else

doMove(source, q)

end if

end alfred_script

on doMove(source, destination)

set source to (POSIX path of (the source as alias))

set destination to "~/Dropbox/zzz_ShareMe"


do shell script "cp -r" & space & quoted form of POSIX path of source & space & POSIX path of destination

end doMove

1 ответ1

2

В идеале, вы должны были разместить этот вопрос на форуме Альфреда. Однако ваша проблема довольно проста, поэтому я с радостью помогу здесь.

По сути, ваш AppleScript для рабочего процесса с одним файлом сам по себе ограничивается обработкой одного файла, поскольку source переменной приводится к alias , который является унарным типом данных (одно значение). Существует класс, называемый alias list , который, как следует из названия, подходит для списка псевдонимов.

Вы также смешали AppleScript со скриптом Bash, который может быть очень полезен в других ситуациях, но это немного странно, так как нет причин делать это. Итак, я дам вам отдельные решения AppleScript и Bash.

Рабочий процесс

Создайте рабочий процесс, который скомпрометирует следующий триггер горячей клавиши, связанный с действием Run Script (не Run NSAppleScript) (для получения дополнительной информации об этих двух действиях обратитесь к страницам справки Alfred , но, вообще говоря, вам никогда не понадобится использовать действие Run NSAppleScript):

Альфред Рабочий процесс

Дважды щелкните триггер горячей клавиши, чтобы настроить его. На первой вкладке (Настройки горячей клавиши) я предполагаю, что вы знаете, как установить нужную горячую клавишу. Однако, также установите поле Аргумент в Выбор в macOS.

На второй вкладке (Похожие приложения) вы можете ограничить действие горячей клавиши, чтобы она работала только тогда, когда в Finder есть фокус. Для этого перетащите значок приложения Finder в список (самый простой способ - вызвать поле поиска Альфреда, ввести "Finder" и перетащить значок отсюда туда).

Сохраните настройки.

Сценарий

Дважды щелкните действие « Выполнить сценарий», чтобы открыть панель редактора. Вы можете выбрать нужный язык в первом раскрывающемся списке: для целей этого вопроса нас интересуют два: /bin/bash (или ваша эквивалентная запись в списке) и /usr/bin/osascript (AS) ( или эквивалент).

osascript - это движок, который компилирует и выполняет AppleScripts.

AS относится к AppleScript; JS относится к JavaScript.

удар

Если вы решите использовать Bash, выберите с вводом как argv. Удалите любой пример кода, который появляется в поле редактирования, и введите этот код:

cp "$@" ~/Dropbox/zzz_ShareMe

AppleScript

Если вы выбираете AppleScript, тип ввода здесь не имеет значения. Удалите любой пример кода, который появляется в поле редактирования, и введите этот код:

tell application "Finder" to reveal ¬
    (duplicate (selection as alias list) ¬
    to folder "zzz_ShareMe" ¬
    of folder "Dropbox" ¬
    of home)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .