como obter o caminho para vários arquivos corretamente através do applescript ou através do terminal

2

O script atual que estou usando para obter o caminho do arquivo para seleção única no localizador é

tell application "Finder"
    set thepath to selection as text
    set pospath to quoted form of the POSIX path of thepath
end tell

Isso me dá um caminho assim: '/Users/lawsome/Desktop/jan-study/untitled folder/'

Esse formato de caminho está funcionando para passar o caminho de arquivo único para outras ações, como mover ou excluir o arquivo selecionado.

Quando eu estou tentando o mesmo script para várias seleções no finder eu recebo resultado como este:

'/Users/lawsome/Desktop/Business Org Feedback.pdfMacintosh HD/Users/lawsome/Desktop/Top 10Macintosh HD/Users/lawsome/Desktop/Follow_Up_letters_Samples.pdfMacintosh HD/Users/lawsome/Desktop/Learn Outlook Tips.txtMacintosh HD/Users/lawsome/Desktop/OutlookTips.pdf'

Este resultado não funciona para mim. O que estou tentando alcançar é passar vários caminhos para itens selecionados do localizador para outras ações.

Se eu arrastar vários arquivos no terminal, ele mostrará o caminho dos arquivos em um formato diferente e isso funcionará para outras ações. Como posso obter o caminho corretamente através de um script ou através de um comando de terminal.

em casa
fonte

Respostas:

3

O selectionno Finder retorna uma lista , então aqui está um exemplo de como eu lidaria com as coisas:

Exemplo de código AppleScript :

tell application "Finder"
    set theSelection to selection
    if theSelection is {} then
        return
    else if (theSelection count) is equal to 1 then
        set thePathFilename to the quoted form of POSIX path of (theSelection as string)
    else
        set thePathFilename to {}
        repeat with i from 1 to (theSelection count)
            copy (quoted form of POSIX path of (item i of theSelection as string)) & space to end of thePathFilename
        end repeat
        set thePathFilename to thePathFilename as string
    end if
end tell
  • Se não houver nenhum selectionquando o script for executado, ele interromperá o processamento.

  • Se apenas um item estiver no selection, o thePathFilenamecontém um nome de arquivo de caminho POSIX citado do item selecionado, como uma seqüência de caracteres.

  • Se mais de um item estiver no selection, o thePathFilenamecontém o nome de arquivo de caminho POSIX citado de cada um dos itens selecionados, como uma seqüência de caracteres, com um espaço após cada um.


Nota: O código AppleScript de exemplo é apenas isso e não emprega nenhum tratamento de erros e destina-se apenas a mostrar uma das várias maneiras de realizar uma tarefa. O ônus é sempre do usuário para adicionar / usar o tratamento de erros apropriado conforme necessário / desejado.

user3439894
fonte
Seu código funcionou. E você explicou muito bem. Estou tentando mover esses arquivos selecionados para o lixo ou outra pasta. Adicionado ao seu código set destpath to "~/.trash" do shell script "mv " & thePathFilename & " " & destpath. Funcionou.
leis de
Você pode adicionar um exemplo, como você teria movido arquivos com o comando repeat.
leis de
@lawsome, Se você quiser mover itens selecionados para o Lixo, você pode simplesmente usar:, tell application "Finder" to move selection to trashnenhum outro código é necessário, sem tratamento de erros, conforme apropriado. O mesmo vale para a movimentação de arquivos, o selectionque não precisa necessariamente ser dividido em um repeatloop, por exemplo, set thisLocation to POSIX file "/path/to/folder/" as aliase, em seguida, tell application "Finder" to move selection to thisLocation -- with replacingao descomentar (removendo o --), se você quiser substituir os itens existentes. Mais uma vez, sem tratamento de erros, conforme apropriado.
user3439894
@ lawsome, Dito isto, como a minha resposta já forneceu uma solução para, em suas palavras "passar vários caminhos para itens finder selecionados para uma ação posterior" e "Como posso obter o caminho corretamente através de um script", se você precisar de ajuda com o consulta feita em seu segundo comentário para minha resposta, então você deve postar outra pergunta, como apenas uma pergunta por questão é permitida.
user3439894
Tudo bem senhor, tenho seus pontos, vou postar outra pergunta depois de ficar preso !! Eu sei que isso soa repetitivo e coxo, mas eu sempre quis dizer isso ... que as pessoas gostam de você no forum do stackexchange são ótimas !!
leis de