Альфред Рабочий процесс для перемещения нескольких файлов в папку 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/
Обновление Я попробовал другой скрипт, но он все равно не работает.
Обязательное задание:
- выбрать несколько файлов в Finder
- Ctrl-Alt-D
- следует скопировать все файлы в
~/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)