Actualización: Solución continuaciónAppleScript: ¿Cómo comprobar si algo es un directorio o un archivo
Digamos que usted tiene una lista de elementos seleccionados de Finder. Supongamos que hay algunos archivos, carpetas, varios paquetes e incluso algunas aplicaciones incluidas en la selección.
Ahora diga que solo quiere aquellos artículos que son (en términos UNIX) directorios. Es decir. solo desea elementos que pueda cd
en la terminal.
Puede comprobar la propiedad de cada elemento kind
y ver si es igual a "carpeta", pero eso no funciona para paquetes de aplicaciones u otros bundles/paquetes, aunque en realidad son "carpetas" (directorios)
Si los elementos son objetos de archivo reales (no alias), puede verificar la propiedad class
de cada elemento ... excepto que tampoco siempre funciona, ya que los paquetes ahora son instancias de "archivo de documento" y las aplicaciones son instancias de "archivo de aplicación".
Es peor si solo tiene una lista de alias en lugar de objetos de archivo reales, ya que no puede verificar la propiedad class
; siempre solo dirá "alias".
Las únicas soluciones que puedo pensar son obtener la ruta POSIX de cada elemento y ver si tiene una barra inclinada hacia adelante, o enviar su ruta a una secuencia de comandos escrita en un idioma diferente, que puede verificar si algo es un directorio o no.
Ambas ideas me parecen locas. La comprobación de una barra inclinada hacia adelante es extremadamente hacky y frágil, y alimentar todo a una secuencia de comandos diferente es una exageración completa.
Actualización: Lo Asmus sugiere a continuación no parece ser
la única
una buena solución
, ya que parece que no hay manera de AppleScript para resolverlo por su propia
:
do shell script "file -b " & filePosixPath
Eso devolverá el "directorio" de la cadena para carpetas, paquetes, aplicaciones, paquetes, etc. etc.
Pero tenga en cuenta (!) Que para los discos, devuelve "directorio adhesivo".
Aquí es una función generalizada que funciona bastante bien
on isDirectory(someItem) -- someItem is a file reference
set filePosixPath to quoted form of (POSIX path of (someItem as alias))
set fileType to (do shell script "file -b " & filePosixPath)
if fileType ends with "directory" then return true
return false
end isDirectory
Bueno, yo diría que la solución más fácil es para pasar rutas POSIX a la herramienta de línea de comandos 'archivo', donde, por ejemplo, 'file -b/Applications/Safari.app' simplemente devuelve" directorio ". Debería ser bastante fácil incorporar eso en un bucle 'do shell script'. – Asmus
@Asmus: Probablemente tengas razón. Después de escribir la pregunta, me di cuenta de que podía hacer un comando rápido de shell en lugar de un script de shell completo. Aún así, parece extraño tener que salir de AppleScript para descubrir algo tan básico como si algo es un directorio o no. Dejaré la pregunta por un día más o menos, y mientras tanto, siéntete libre de escribir tu comentario como respuesta para que puedas obtener los puntos :) – Flambino
@Flambino No puedo dejar de votar tu buena pregunta porque utilicé todo mi votos arriba! :( – fireshadow52