Questão Obtendo o caminho Unix de vários arquivos / pastas no serviço Automator


Eu quero obter o caminho de (vários) arquivos (s, pastas) no serviço Automator, selecionando-os no Finder e, em seguida, usá-los no comando shell.

Eu já tenho algo assim:

Inicie o AppleScript:

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

corrida final

Isso funciona, mas apenas para um arquivo ou pasta e não converte /path/file with spaces para /path/file\ with\ spaces.

Então, como consertar isso?


1


origem




Respostas:


Desde que você está fazendo isso em Automator, com um Executar o AppleScript  agir sobre, isso fará o que você precisa:

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

Não há necessidade de complicar as coisas e passar pela ladainha mostrada na outra resposta!


Ou se você optar por fazê-lo em uma planície AppleScript  script / aplicativoentão isso fará o que você precisa:

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

Nota: o exemplo  AppleScript  código acima é apenas isso, e não inclui qualquer tratamento de erros como pode ser apropriado / necessário / desejado, o ônus é sobre o usuário para adicionar qualquer tratamento de erros para qualquer código de exemplo apresentado e ou código escrito pelo próprio.


0





Isso funciona para mim usando a última versão do 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 {}

0



O OP está usando o terminal do script  comando não AppleScript do shell script  comando. A questão imediata vejo você sua resposta é se mais de um arquivo e dizer que muitos arquivos são selecionados, enquanto o --bell  opção do clamscan  comando pode soar, por assim dizer, como alguém vai saber qual dos muitos arquivos selecionados é o infectado? -i, que imprime arquivos infectados, é inútil em um do shell script  comando a menos que você esteja indo para definir o seu saída para um variável e depois analisar como, mas não no terminal do script  comando. Algo para pensar sobre! - user3439894
Obrigado pelo heads-up .. Trabalhando em outro post no momento, mas vou voltar a este em breveE fazer as mudanças necessárias - wch1zpink
A saída final para o comando shell deve ser esta: clamscan -I —bell '/ path / file1' '/ path / file 2' e.t.c. - COOL_IRON
Endereçou o problema .. Atualizado o código - wch1zpink
Sua resposta tem propriedades desnecessárias, que você está definindo e desativação, múltiplo desnecessário repeat  rotações. O OP está usando Automator e um Executar o AppleScript  açao, então o único variávele não precisa ser um property, é theItemsToScanList como um liste apenas um repeat  laço para processar o items of input nele, com um único comando linha dentro do repeat  laço. Você está usando 21 linhas de código onde isso pode ser feito com 8 linhas de código adicionado ao Executar o AppleScript  agir sobre para atingir o objetivo do OP. - user3439894