Альфред Рабочий процесс для перемещения нескольких файлов в папку Dropbox

Я очень новичок в 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 ответ

Решение

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

По сути, ваш 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)
Другие вопросы по тегам