¿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
*.sh
y también quiero usarlo para*.md
archivos en lugar de xcode.Obtenga la identificación de la aplicación predeterminada para los
.sh
archivos:La última línea es la identificación.
Use esta identificación de la aplicación para todos los
.md
archivos: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 all
Editar
~/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
defaults
o/usr/libexec/PlistBuddy
. Ambos tienen páginas de manual extensas.Por ejemplo, para abrir todos los
.plist
archivos usandoXcode
:Por supuesto, deberá asegurarse de que ya no haya otra entrada para la infección urinaria
com.apple.property-list
allí.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 $x
copiar 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"))'
.defaults
no parece ser capaz de hacerlo y requiere algunasPlistBuddy
llamadas. Pero es posible hacerlo en un script de shell reutilizable.