¿Cómo puedo cambiar la aplicación predeterminada para todos los archivos de un tipo de archivo en particular a través de la Terminal en OS X?
macos
file-association
yashodhan
fuente
fuente

Respuestas:
Tengo una manera más simple. Querrás Homebrew si aún no lo tienes:
Instalar duti:
Ahora necesita encontrar la identificación de la aplicación que desea usar y asignarla a la extensión para la que desea usarla. En este ejemplo, ya uso Brackets para
*.shy también quiero usarlo para*.mdarchivos en lugar de xcode.Obtenga la identificación de la aplicación predeterminada para los
.sharchivos:La última línea es la identificación.
Use esta identificación de la aplicación para todos los
.mdarchivos:fuente
osascript -e 'id of app "$appName"'para obtener la identificación de cualquier aplicación instalada en su sistemaduti -s $(osascript -e 'id of app "Visual Studio Code"') .md allEditar
~/Library/Preferences/com.apple.LaunchServices.plist.Agregue una entrada debajo
LSHandlers, que contenga la UTI (claveLSHandlerContentType, por ejemplopublic.plain-text) y el identificador del paquete de la aplicación (LSHandlerRoleAll, por ejemplocom.macromates.textmate).Se ve así en el Editor de la lista de propiedades :
Para hacer esto desde la línea de comandos, use
defaultso/usr/libexec/PlistBuddy. Ambos tienen páginas de manual extensas.Por ejemplo, para abrir todos los
.plistarchivos usandoXcode:Por supuesto, deberá asegurarse de que ya no haya otra entrada para la infección urinaria
com.apple.property-listallí.Aquí hay un script más completo que eliminará las entradas existentes para una UTI y agregará una nueva. Solo puede manejar
LSHandlerContentType, y siempre se configuraráLSHandlerRoleAll, y tiene ID de paquete codificados en lugar de parámetros. Aparte de eso, debería funcionar bastante bien.fuente
x=~/Library/Preferences/com.apple.LaunchServices.plist; plutil -convert xml1 $x; open -a TextEdit $xcopiar y pegar esas entradas de LSHandlers. Para obtener el identificador de paquete que puede hacerosascript -e 'bundle identifier of (info for (path to app "TextEdit"))'.defaultsno parece ser capaz de hacerlo y requiere algunasPlistBuddyllamadas. Pero es posible hacerlo en un script de shell reutilizable.