Estoy escribiendo un script de shell que sincronizará archivos desde máquinas remotas, algunos Linux, algunos Mac, a un servidor central de respaldo. Los Mac tienen carpetas en el nivel raíz que contienen alias de todos los archivos/carpetas de los que se necesita hacer una copia de seguridad. ¿Qué es un comando de terminal que puedo usar para resolver la ruta a los archivos/carpetas a los que apuntan los alias? (Voy a tener que pasar estos caminos para rsync)Comando de terminal OS X para resolver la ruta de un alias
Respuesta
He encontrado el siguiente script que hace lo que necesitaba:
#!/bin/sh
if [ $# -eq 0 ]; then
echo ""
echo "Usage: $0 alias"
echo " where alias is an alias file."
echo " Returns the file path to the original file referenced by a"
echo " Mac OS X GUI alias. Use it to execute commands on the"
echo " referenced file. For example, if aliasd is an alias of"
echo " a directory, entering"
echo ' % cd `apath aliasd`'
echo " at the command line prompt would change the working directory"
echo " to the original directory."
echo ""
fi
if [ -f "$1" -a ! -L "$1" ]; then
# Redirect stderr to dev null to suppress OSA environment errors
exec 6>&2 # Link file descriptor 6 with stderr so we can restore stderr later
exec 2>/dev/null # stderr replaced by /dev/null
path=$(osascript << EOF
tell application "Finder"
set theItem to (POSIX file "${1}") as alias
if the kind of theItem is "alias" then
get the posix path of ((original item of theItem) as text)
end if
end tell
EOF
)
exec 2>&6 6>&- # Restore stderr and close file descriptor #6.
echo "$path"
fi
que he encontrado this tool.
Un pequeño código compilado, una función en su .bash_profile
, y listo. Manejo transparente de alias, solo use "cd". Varias veces más rápido que usar Applescript, también.
La parte útil de su enlace (esta herramienta): 'getTrueName.c' ya no está disponible desde allí. –
@danielAzuelos ¡gracias por avisarme! Tuiteé al autor, el enlace es fijo. – Groxx
Tuve este problema y he implementado una herramienta de línea de comandos. Es de código abierto en https://github.com/rptb1/aliasPath
La clave es que funcionará incluso si el alias está roto, a diferencia de cualquier solución de AppleScript que he encontrado. Por lo tanto, puede usarlo para escribir scripts para corregir alias cuando muchos archivos cambian de volumen. Es por eso que lo escribí.
El código fuente es muy corto, pero aquí hay un resumen de la parte clave, para cualquier persona que necesite resolver este problema en el código, o que quiera buscar los protocolos relevantes.
NSString *aliasPath = [NSString stringWithUTF8String:posixPathToAlias];
NSURL *aliasURL = [NSURL fileURLWithPath:aliasPath];
NSError *error;
NSData *bookmarkData = [NSURL bookmarkDataWithContentsOfURL:aliasURL error:&error];
NSDictionary *values = [NSURL resourceValuesForKeys:@[NSURLPathKey]
fromBookmarkData:bookmarkData];
NSString *path = [values objectForKey:NSURLPathKey];
const char *s = [path UTF8String];
- 1. Ingrese en un directorio a través de un alias en el terminal Mac OS X
- 2. ldconfig para Mac OS X
- 3. Recarga Apache2 a través de Terminal en MAC OS X
- 4. Unicode de Python en la terminal del OS X
- 5. Uso del comando como ctrl en un terminal Mac OS X
- 6. ¿Cómo invierto el comando cd en la Terminal en Mac OS X?
- 7. Mac os x Comando de pantalla y buffer de Terminal.app
- 8. OS X comando de arco incorrecto
- 9. Los espacios en java ejecutan la ruta para OS X
- 10. Terminal Mac OS X/Open con ventanas especificadas
- 11. Creando y ejecutando la solución Monodesarrollo en OS X Terminal
- 12. alias de comando de DOS para runas
- 13. git: comando no encontrado (en OS X 10.5)
- 14. Indicador Bash en la terminal OS X roto
- 15. ¿Cómo configurar el inicio predeterminado de OS X Terminal?
- 16. tecla Comando tecla Meta en OS X Terminal.app
- 17. Añadir al pitón ruta de Mac OS X
- 18. Cómo saber dónde se define alias (en el sentido bash) cuando se ejecuta Terminal en Mac OS X
- 19. Ejecutar el comando de la aplicación para abrir el terminal
- 20. Bash Programación - Creación de un comando de terminal personalizado - Mac
- 21. Comando Mysql no encontrado en OS X 10.7
- 22. ¿Hay alguna manera en el terminal OS X para mover el cursor palabra por palabra?
- 23. Objective-C de serie - Mac OS X
- 24. Linux equivalente al comando "abrir" de Mac OS X
- 25. ¿Cuáles son los diversos archivos que podrían tener declaraciones PATH para OS X Terminal en ellos?
- 26. comando MAC para ejecutar un archivo .pkg en el terminal
- 27. ¿Cómo comienzo un comando desde la terminal para que la terminal no sea la principal?
- 28. Windows equivalente al comando "abrir" de Mac OS X
- 29. línea de comando IntelliJ en Mac OS X
- 30. Ruta de base de datos personalizada mySQL de Mac OS X (MAMP PRO)
Esto está bien siempre que se pueda acceder al elemento original en el momento en que se ejecuta el script. No funciona si el alias está roto o el volumen no se puede montar. He agregado un enlace a una herramienta que puede funcionar en esas circunstancias en otra respuesta http://stackoverflow.com/a/17570232/425078 – rptb1
¿por qué toda la copia y restauración de fd 2 existente? ¿por qué no simplemente decir 'path = $ (osascript 2>/dev/null << EOF ...)' – dubiousjim
@dubiousjim que sería más limpio. No escribí este script; Lo encontré en línea. Una vez dicho esto, probaré su sugerencia y actualizaré la respuesta – Josh