Como alterar o caminho AppleScript para um caminho no estilo Terminal?

11

Eu tenho um serviço personalizado que eu criei no Automater (eu estou no OS X 10.6.5). O Serviço executa um AppleScript que, por sua vez, executa um script de shell. Aqui está o AppleScript:

on run {input, parameters}
    -- do shell script "/usr/bin/find " & input & " -type f -name .DS_Store -delete -print"
    display alert "Path: " & input
end run

O problema é que o caminho passado pelo serviço (na variável input) se parece com:

Macintosh HD:Users:Matthew:Documents:Programming:Apple Scripts:

E para que o comando seja executado corretamente, o caminho precisa se parecer com:

Macintosh\ HD/Users/Matthew/Documents/Programming/Apple\ Scripts/

Então, existe uma maneira de traduzir o primeiro caminho para o segundo caminho? Eu estava esperando por uma função principal que lida com isso. Mas suponho que algum tipo de regex / find / replace / etc funcionaria? Eu estou familiarizado com HTML / CSS / Javascript / PHP, não com Cocoa / AppleScript / C. Qualquer direção ou sugestão seria ótimo!

matthewpavkov
fonte

Respostas:

8

Use quoted form of the POSIX path of input. Sem a quoted form ofparte, ele não manipulará caracteres engraçados (como espaços) nos nomes de arquivos corretamente. Veja esta nota técnica da Apple .

Gordon Davisson
fonte
6

Ok ... isso foi mais fácil do que eu imaginava. Depois de pesquisar no Google, parece que o que eu preciso aqui é o POSIX path ofcomando. Isso converte um determinado caminho em um estilo Unix, que é o tipo de caminho que você veria / usaria no Terminal. Assim:

POSIX path of input

Dá-me um caminho como:

/Users/Matthew/Documents/Programming/Apple Scripts/

Parece levar em consideração que você só precisa de um /no início do caminho, em vez do nome do disco rígido. No entanto, ele não escapa de \espaços (ou manipula caracteres especiais) no caminho. Portanto, como a outra resposta aqui menciona, é necessário colocar o caminho entre aspas ( "ou ') para que esses espaços (ou caracteres especiais) sejam interpretados literalmente. Você consegue isso usando quoted form of. Aqui está:

quoted form of the POSIX path of the input
-- gives a path like: '/Users/Matthew/Documents/Programming/Apple Scripts/'
matthewpavkov
fonte
2
O /no início do caminho é o volume de inicialização. Outros discos rígidos estão sob/Volumes/
Josh