Esiste un equivalente macOS del comando assoc di Windows?

3

Sto cercando di cambiare un'associazione di file sul Mac usando una sorta di script. So che posso fare qualcosa del genere in Windows usando il comando assoc .

C'è qualcosa di scriptable su macOS che farà un lavoro simile? Non mi importa se è in Bash (la mia preferenza), AppleScript o qualcosa in Automator.

Sono a conoscenza del comando dutil ma voglio essere in grado di farlo senza software aggiuntivo.

    
posta Manngo 02.11.2018 - 04:46
fonte

2 risposte

3

Poiché il sistema macOS utilizza il database e le utilità di Launch Services per mappare i tipi di file e in secondo luogo, estensioni di file per le applicazioni che li aprono, l'analogo più simile a assoc sarebbe lsregister

È sepolto nella cartella di sistema, Core Services, framework che contiene i servizi di avvio.

Ci sono tonnellate di buone domande e risposte qui una volta che conosci l'utilità da cercare perché ci sono tonnellate di post di blog eccellenti , guide per sviluppatori e documentazione ufficiale .

Dato che ho / usr / local / bin nel mio percorso, di solito collego lo sym lì così posso ospitarlo digitandolo:

mac:~ me$ ln -s /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister  /usr/local/bin
mac:~ me$ lsregister
lsregister: [OPTIONS] [ <path>... ]
                      [ -apps <domain>[,domain]... ]
                      [ -libs <domain>[,domain]... ]
                      [ -all  <domain>[,domain]... ]

Paths are searched for applications to register with the Launch Service database.
Valid domains are "system", "local", "network" and "user". Domains can also
be specified using only the first letter.

  -kill     Reset the Launch Services database before doing anything else
  -seed     If database isn't seeded, scan default locations for applications and libraries to register
  -lint     Print information about plist errors while registering bundles
  -lazy n   Sleep for n seconds before registering/scanning
  -r        Recursive directory scan, do not recurse into packages or invisible directories
  -R        Recursive directory scan, descending into packages and invisible directories
  -f        force-update registration even if mod date is unchanged
  -u        unregister instead of register
  -v        Display progress information
  -gc       Garbage collect old data and compact the database
  -dump     Display full database contents after registration
  -h        Display this help
    
risposta data 02.11.2018 - 04:56
fonte
3

Modifica dell'associazione file per un singolo file o un set di file (AppleScript)

Questo script dimostra innanzitutto che l'applicazione predefinita per alcuni file di testo sul mio sistema era impostata su TextEdit . Quindi modifica l'associazione file per quel particolare file in modo che ora si apra con Atom . Infine, associa tutti i file di testo sul desktop con l'applicazione Atom .

tell application "System Events"
    get the default application of the file "/path/to/some file.txt"
        --> alias "Macintosh HD:Applications:TextEdit.app:" of application "System Events"

    # Individual file:
    set the default application of the file "/path/to/some file.txt" to ¬
        the path to the application named "Atom"

    # A set of files:
    set the default application of every file of the desktop folder whose ¬
        name extension = "txt" to the path to the application "Atom"
end tell

Modifica delle associazioni di file per tutti i file di un determinato tipo (JXA)

Usando JavaScript per l'automazione, puoi implementare le funzioni di Core Foundation in un modo che non puoi fare con AppleScriptObjC, in modo da interagire con Avvia servizi a livello di sistema e modificare l'associazione di file per un dato file tipo.

Qui ho scelto come target file di testo normale (questi hanno estensione .txt per impostazione predefinita) e ho cambiato l'applicazione predefinita che risponde a loro in Atom :

ObjC.import('CoreServices');

var contentType = 'public.plain-text';
var bundleID = Application('Atom').id();

$.LSSetDefaultRoleHandlerForContentType(
            contentType, 
            $.kLSRolesAll, 
            bundleID
        );

Il tipo di file deve essere scelto come target < em> Identificatore di tipo uniforme . Si tratta di stringhe di testo speciali che identificano in modo univoco una determinata classe o tipo di elemento. Il link ti porterà a una pagina che elenca le UTI dichiarate dal sistema di Apple per tutti i tipi di file che ti interessano. Fai attenzione a non scegliere semplicemente quello che sembra soddisfare le tue esigenze a prima vista, poiché le UTI sono strutturato in una specie di albero ereditario. Pertanto, avrei potuto scegliere pigramente public.text , che ho visto prima nella lista, fino a quando non avremo letto più attentamente, apprendiamo che questa UTI è un tipo base per tutto il testo, che includerebbe HTML e RTF file.

    
risposta data 02.11.2018 - 06:25
fonte

Leggi altre domande sui tag