Получение Unix-пути к нескольким файлам / папкам в сервисе Automator
Я хочу получить путь к (нескольким) файлам (папкам) в службе Automator, выбрав их в Finder, а затем использовать их в команде оболочки.
У меня уже есть что-то вроде этого:
Запустите AppleScript:
on run {input, parameters}
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
,
Итак, как это исправить?
2 ответа
Поскольку вы делаете это в Automator, с помощью команды " Активировать AppleScript", это будет делать то, что вам нужно:
on run {input, parameters}
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 является именно этим и не включает в себя обработку ошибок, которая может быть уместной / необходимой / требуемой, пользователь должен добавить любую обработку ошибок для любого представленного примера кода или кода, написанного самим собой.,
Это работает для меня, используя последнюю версию 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 {}