mac bashrc bash_profile macos shell path terminal

bashrc - set alias macos



Comando de terminal OS X para resolver la ruta de un alias (3)

Estoy escribiendo un guión 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? (Tendré que pasar estos caminos a rsync)


Encontré 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


Tuve este problema, así que implementé 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];


Encontré esta herramienta .

Un poquito de código compilado, una función en tu .bash_profile y voila. Manejo transparente de alias, solo use "cd". Varias veces más rápido que usar Applescript, también.