Отримання шляху Unix до декількох файлів / папок в сервісі Automator


1

Я хочу отримати шлях до (декількох) файлів, папок в службі 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.

Отже, як це виправити?

Відповіді:


1

Так як ви робите це в Automator , з Run 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 код вище тільки що, і не включає в себе обробку помилок , які можуть знадобитися / потрібно / хотів, відповідальність лежить на користувачеві , щоб додати будь-яку обробку помилок для будь-якого коду прикладу представлені і чи код , написаний на себе .


1

Це працює для мене за допомогою останньої версії Сьєрра

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 {}

1
OP використовує термінал do script команди НЕ AppleScript в do shell script команду . Безпосередня проблема , яку я бачу вас ваша відповідь , якщо більше , то один файл і сказати багато файлів обрані, в той час як --bell опція в clamscan команді може дзвонити, так би мовити, як один будуть знати , яка з партій вибраних файлів є заражений один? -i, який друкував би заражені файли, марний у do shell script команді, якщо ви не збираєтеся встановити його вихід на змінну, а потім проаналізувати її якось, але не в do script команді Terminal . Щось подумати!
користувач3439894

Дякую за головну роботу. Наразі працюю над іншою посадою, але незабаром я повернусь до цього і внесу необхідні зміни
wch1zpink

Кінцевий вихід команди оболонки повинен бути таким: clamscan -I —bell '/ path / file1' '/ path / file 2' etc.
COOL_IRON

Вирішено питання .. Оновлено код
wch1zpink

Ваша відповідь має непотрібні властивості, які ви встановлюєте та скасовуєте, непотрібні кілька repeat циклів . ОП використовує автоматизатор і дію запустити AppleScript , тому єдина змінна , і вона не повинна бути a , є як a , і лише один цикл для обробки в неї, з одним командним рядком в циклі . Ви використовуєте 21 рядок коду, де це можна зробити за допомогою 8 рядків коду, доданих до актону Run AppleScript для досягнення мети ОП.propertytheItemsToScanListlistrepeat items of inputrepeat
користувач3439894
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.