Comment puis-je changer l'application par défaut pour tous les fichiers d'un type de fichier particulier via le terminal sous OS X?
macos
file-association
yashodhan
la source
la source
Réponses:
J'ai une manière plus simple. Vous voudrez Homebrew si vous ne l'avez pas déjà:
Installez duti:
Vous devez maintenant trouver l'ID de l'application que vous souhaitez utiliser et l'attribuer à l'extension pour laquelle vous souhaitez l'utiliser. Dans cet exemple, j'utilise déjà des supports pour
*.sh
et je veux également l'utiliser pour des*.md
fichiers au lieu de xcode.Obtenez l'ID d'application par défaut pour les
.sh
fichiers:La dernière ligne est l'identifiant.
Utilisez cet identifiant d'application pour tous les
.md
fichiers:la source
osascript -e 'id of app "$appName"'
pour obtenir l'ID de n'importe quelle application installée sur votre systèmeduti -s $(osascript -e 'id of app "Visual Studio Code"') .md all
Modifier
~/Library/Preferences/com.apple.LaunchServices.plist
.Ajoutez une entrée sous
LSHandlers
, contenant l'UTI (cléLSHandlerContentType
, par exemplepublic.plain-text
) et l'identifiant du bundle d'application (LSHandlerRoleAll
, par exemplecom.macromates.textmate
).Il ressemble à ceci dans l' éditeur de liste de propriétés :
Pour ce faire à partir de la ligne de commande, utilisez
defaults
ou/usr/libexec/PlistBuddy
. Les deux ont de nombreuses pages de manuel.Par exemple pour ouvrir tous les
.plist
fichiers en utilisantXcode
:Bien sûr, vous devez vous assurer qu'il n'y a pas déjà une autre entrée pour l'UTI
com.apple.property-list
là-dedans.Voici un script plus complet qui supprimera les entrées existantes pour une UTI et en ajoutera une nouvelle. Il ne peut gérer
LSHandlerContentType
et sera toujours définiLSHandlerRoleAll
, et a des ID de paquet codés en dur au lieu de paramètres. En dehors de cela, cela devrait fonctionner assez bien.la source
x=~/Library/Preferences/com.apple.LaunchServices.plist; plutil -convert xml1 $x; open -a TextEdit $x
copier et coller ces entrées LSHandlers. Pour obtenir l'identifiant du bundle, vous pouvez le faireosascript -e 'bundle identifier of (info for (path to app "TextEdit"))'
.defaults
ne semble pas être capable de le faire, et cela nécessite quelquesPlistBuddy
appels. Mais il est possible de le faire dans un script shell réutilisable.