¿Cómo cambiar la ruta de AppleScript a una ruta de estilo Terminal?

11

Tengo un servicio personalizado que he creado en Automater (estoy en OS X 10.6.5). El Servicio ejecuta un AppleScript que a su vez ejecuta un script de shell. Aquí está el 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

El problema es que la ruta pasada por el Servicio (en la variable input) se ve así:

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

Y para que el comando se ejecute correctamente, la ruta debe verse así:

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

Entonces, ¿hay alguna manera de traducir la primera ruta a la segunda ruta? Esperaba una función central que maneje esto. Pero supongo que funcionaría algún tipo de expresión regular / buscar / reemplazar / etc. Estoy familiarizado con HTML / CSS / Javascript / PHP, no con Cocoa / AppleScript / C. ¡Cualquier dirección o sugerencia sería genial!

matthewpavkov
fuente

Respuestas:

8

Uso quoted form of the POSIX path of input. Sin la quoted form ofparte, no manejará caracteres divertidos (como espacios) en los nombres de archivo correctamente. Vea esta nota técnica de Apple .

Gordon Davisson
fuente
6

Ok ... esto fue más fácil de lo que me había dado cuenta. Después de buscar en Google, parece que lo que necesito aquí es el POSIX path ofcomando. Esto convierte una ruta determinada en una ruta de estilo Unix, que es el tipo de ruta que vería / usaría en la Terminal. Entonces:

POSIX path of input

Me da un camino como:

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

Parece tener en cuenta que solo necesita un /al comienzo de la ruta, en lugar del nombre del disco duro. Sin embargo, no escapa \espacios (ni maneja caracteres especiales) en la ruta. Entonces, como menciona la otra respuesta aquí, debe colocar la ruta entre comillas ( "o ') para que esos espacios (o caracteres especiales) se interpreten literalmente. Lo logras usando quoted form of. Aquí está:

quoted form of the POSIX path of the input
-- gives a path like: '/Users/Matthew/Documents/Programming/Apple Scripts/'
matthewpavkov
fuente
2
El /principio de la ruta es el volumen de arranque. Otros discos duros están bajo/Volumes/
Josh