Получение Unix-пути к нескольким файлам / папкам в сервисе Automator

405
COOL_IRON

Я хочу получить путь к (нескольким) файлам (папкам) в службе Automator, выбрав их в Finder, а затем использовать их в команде оболочки.

У меня уже есть что-то вроде этого:

Запустите AppleScript:

on run  tell application "Terminal" activate do script with command "clamscan --bell -i " & POSIX path of input end tell 

конец бега

Это работает, но только для одного файла или папки и не конвертируется /path/file with spacesв /path/file\ with\ spaces.

Итак, как это исправить?

1

2 ответа на вопрос

0
wch1zpink

Это работает для меня, используя последнюю версию Sierra

property posixPathofSelectedFinderItems : {} property QposixPathofSelectedFinderItems : {} -- stores the selected files in the active finder window -- in the variable "these_items" tell application "Finder" set these_items to the selection end tell  -- returns the Posix Path of each of those files and  -- stores all of that info in the "posixPathofSelectedFinderItems" -- as a list repeat with i from 1 to the count of these_items set this_item to (item i of these_items) as alias set this_info to POSIX path of this_item set end of posixPathofSelectedFinderItems to this_info end repeat  repeat with i from 1 to number of items in posixPathofSelectedFinderItems set this_item to item i of posixPathofSelectedFinderItems set this_item to quoted form of this_item set end of QposixPathofSelectedFinderItems to (this_item & " ") end repeat tell application "Terminal" activate do script with command "clamscan --bell -i " & items of QposixPathofSelectedFinderItems end tell set posixPathofSelectedFinderItems to {} set QposixPathofSelectedFinderItems to {} 
В OP используется терминал `do script` _command_, а не AppleScript` do shell script` _command_. Непосредственная проблема, на которую я вижу ваш ответ, заключается в том, что если выбрано более одного файла и сказать, что много файлов выбрано, в то время как `--bell` _option_ из` clamscan` _command_ может звонить, так сказать, как узнать, какой из множества выбранных файлов зараженный? `-i`, который будет печатать зараженные файлы, бесполезен в` do shell script` _command_, если вы не собираетесь установить его _output_ равным _variable_, а затем проанализировать его каким-то образом, но не в терминальном `do script` _command_. Что-то думать о! user3439894 6 лет назад 1
Спасибо за хедз-ап. Работаю над другим постом в данный момент, но я скоро вернусь к этому и внесу необходимые изменения. wch1zpink 6 лет назад 0
Окончательный вывод команды shell должен быть следующим: clamscan -I —bell '/ path / file1' '/ path / file 2' и т. Д. COOL_IRON 6 лет назад 0
Решил проблему .. Обновил код wch1zpink 6 лет назад 0
В вашем ответе есть ненужные свойства, которые вы устанавливаете ** и ** не устанавливаете, ненужные множественные `repeat` _loops_. OP использует ** Automator ** и ** Run AppleScript ** _action_, поэтому единственным _variable_, и он не должен быть `свойством`, является` theItemsToScanList` как `список`, и только один `repeat` _loop_ для обработки` элементов ввода` в него, с одной строкой _command_ внутри `repeat` _loop_. Вы используете 21 строку _code_, где это можно сделать с помощью 8 строк _code_, добавленных к ** Run AppleScript ** _acton_ для достижения цели OP. user3439894 6 лет назад 0
0
user3439894

Так как вы делаете это в Automator, с помощью Acton Run AppleScript , это будет делать то, что вам нужно:

on run   set theItemsToScanList to {} repeat with i from 1 to count input set end of theItemsToScanList to quoted form of (POSIX path of (item i of input as string)) & space end repeat  tell application "Terminal" activate do script with command "clamscan --bell -i " & theItemsToScanList end tell  end run 

Нет необходимости усложнять вещи и проходить ригмолу, показанную в другом ответе!


Или, если вы решите сделать это в простом скрипте / приложении AppleScript , то это сделает то, что вам нужно:

set theseItems to application "Finder"'s selection  set theItemsToScanList to {} repeat with i from 1 to count theseItems set end of theItemsToScanList to quoted form of (POSIX path of (item i of theseItems as string)) & space end repeat  tell application "Terminal" activate do script with command "clamscan --bell -i " & theItemsToScanList end tell 

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