28 votes

Modifier l'association de fichiers dans le terminal ?

Existe-t-il une méthode pour associer les types de fichiers aux applications via le terminal ? Je pensais que ~/Bibliothèque/Préférences/com.apple.launchservices.plist pourrait le faire, et j'ai également vu : Pourquoi une modification en ligne de commande de ~/Bibliothèque/Préférences/com.apple.LaunchServices.plist n'est-elle pas effective immédiatement ? mais je n'arrive pas à le faire fonctionner.

Je suppose que je cherche un moyen d'imiter ce que fait l'interface graphique lorsque quelqu'un l'utilise pour changer de type d'association, cela semble fonctionner instantanément là....

0 votes

Quelqu'un a-t-il eu du succès récemment ? l'utilisation de xattr pour modifier cela fichier par fichier ?

11voto

da4 Points 4796

Vérifiez duti :

duti est un outil en ligne de commande écrit par Andrew Mortensen, conçu pour définir les applications par défaut pour les types de documents et les schémas URL sur Mac OS X.

Les types de documents sous Mac OS X sont définis par ce qu'Apple appelle des identifiants de type uniforme, ou UTI. Les fichiers HTML, par exemple, ont un UTI de public.html. Les documents Microsoft Word sont décrits par l'UTI com.microsoft.word.doc. Apple fournit de nombreux UTIs avec Mac OS X, mais les développeurs sont libres de définir les leurs, tant que l'UTI est unique pour ce type de document.

Le nom de duti signifie "défaut pour l'UTI".

9 votes

Suggestion obligatoire : utiliser brew install duti pour installer duti

10voto

Fuzzy Purple Monkey Points 702

Vous pouvez modifier ~/Library/Preferences/com.apple.LaunchServices.plist ( ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist sur Catalina) dans un éditeur de texte après l'avoir converti en XML :

plutil -convert xml1 ~/Library/Preferences/com.apple.LaunchServices.plist
# Catalina: 
plutil -convert xml1 ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist -o output.xml

Ensuite, ajoutez des entrées comme celle-ci dans le LSHandlers le tableau :

<dict>
  <key>LSHandlerContentType</key>
  <string>com.adobe.pdf</string>
  <key>LSHandlerRoleAll</key>
  <string>net.sourceforge.skim-app.skim</string>
</dict>
<dict>
  <key>LSHandlerContentTag</key>
  <string>mkv</string>
  <key>LSHandlerContentTagClass</key>
  <string>public.filename-extension</string>
  <key>LSHandlerRoleAll</key>
  <string>org.videolan.vlc</string>
</dict>

Vous pouvez utiliser mdls pour voir les UTIs des types de fichiers et quelque chose comme osascript -e 'id of app "AppName"' pour voir les identifiants des paquets d'applications.

Vous pouvez appliquer des modifications à com.apple.LaunchServices.plist en redémarrant. Se déconnecter et se reconnecter ne suffit pas.


NOTE : duti n'est plus en développement actif et a été étiqueté par ses mainteneurs comme "non soutenu". Le projet n'a pas connu de progrès majeur depuis 2012 en dehors des mises à jour de configuration. Il est passé de Sourceforge à Github. Cette réponse a été mise à jour pour inclure les nouveaux liens.

J'utilise également duti cependant. J'ai enregistré un fichier comme celui-ci (avec environ 100 lignes) en tant que ~/.duti :

org.gnu.Emacs public.plain-text all # .txt, .text, plain text files without an extension
org.gnu.Emacs public.unix-executable all # executable scripts
com.SequentialX.Sequential .jpg all
org.videolan.vlc .mkv all

J'ai un agent launchd qui exécute duti ~/.duti automatiquement lorsque ~/.duti est modifié.

Vous pouvez normalement utiliser les extensions de nom de fichier (comme .jpg ) au lieu d'une UTI (comme public.jpg ) pour spécifier les types de fichiers. duti convertit les extensions en UTI qui s'appliquent également à d'autres extensions (telles que .jpeg ). Pour certaines extensions comme .mkv y .tex L'UTI dépend de l'application qui a enregistré l'extension en premier.

Le site nouvelle version de duti ne comprend que le code source, mais 1.5.0 comprend également un installateur.

2voto

Josh Gummersall Points 21

Voici un agent launchd pour duti qui fera l'affaire :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.duti.watcher</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/duti</string>
      <string>/Users/joshgummersall/.duti</string>
    </array>
    <key>UserName</key>
    <string>joshgummersall</string>
    <key>KeepAlive</key>
    <false/>
    <key>WatchPaths</key>
    <array>
      <string>/Users/joshgummersall/.duti</string>
    </array>
  </dict>
</plist>

Remplacer évidemment joshgummersall avec votre propre nom d'utilisateur. J'ai placé ce fichier à ~/Library/LaunchAgents/duti.plist , chmmod d à 644 et a couru :

$ launchctl load -F -w ~/Library/LaunchAgents/duti.plist

1voto

Nate Points 308

Réponse courte : L'association d'application d'un fichier est stockée dans le fichier fourchette de ressources et Apple fournit deux utilitaires ( Rez y DeRez ) qui permettent de manipuler les fourches de ressources, mais ce n'est pas pour les âmes sensibles.

Pour plus de détails, cette question trouve une réponse très complète chez Super User :

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X