Configure instantáneamente asociaciones de archivos familiares

Configuración automatizada de asociaciones de archivos, es decir, selección de un programa que abrirá un archivo desde Explorer/Finder. Y lo comparto.

Primero los problemas. Los archivos con las extensiones requeridas a menudo no se abren con nada de forma predeterminada y, si se abren, con algún iTunes. En Windows, las asociaciones necesarias a veces se pierden por completo al instalar (o incluso desinstalar) programas: a veces se desinstala GIMP y los archivos ico pasan del visor de archivos habitual a la Galería de fotos estándar. ¿Por qué? ¿Para qué? Desconocido... ¿Qué pasa si encuentro un nuevo editor o, por diversos motivos, una nueva instalación? ¿Qué pasa si hay más de una computadora? En general, hacer clic con el mouse en los diálogos es un gran entretenimiento.

En lugar de eso, guardé dos archivos en Dropbox y ahora puedo hacer que el mundo de las computadoras vuelva a la normalidad casi al instante. ¿Y qué has estado esperando durante tantos años? La siguiente es la receta para Windows y macOS.

Windows

En la consola de Windows cmd.exe Esto se hace en dos etapas:

ftype my_file_txt="C:Windowsnotepad.exe" "%1"
assoc .txt=my_file_txt

Los cambios entran en vigor inmediatamente. A pesar de que la asociación está registrada para un usuario específico, por alguna razón estos comandos deben ejecutarse como administrador. Y no olvide duplicar el símbolo de porcentaje (%%1) cuando ejecute desde un archivo bat. El mundo mágico de Windows 7 Ultimate de 64 bits…

macOS

En MacOS es conveniente establecer asociaciones usando la utilidad duti. Se instala mediante brew install duti. Ejemplo de uso:

duti -s com.apple.TextEdit .txt "editor"

Los cambios entran en vigor inmediatamente, no se requiere sudo. Aquí el argumento "com.apple.TextEdit" es el llamado "ID de paquete" del programa que necesitamos. El argumento "editor" es el tipo de asociación: "editor" para editar, "espectador" para ver, "todos" para todo.

Puede encontrar el "ID del paquete" de esta manera: si hay "/Applications/Sublime Text.app" de la tercera versión, entonces su ID del paquete será "com.sublimetext.3" o algún otro:

> osascript -e 'id of app "Sublime Text"'
com.sublimetext.3

Probado en macOS Sierra.

Script final para Windows (.bat)

@echo off

set XNVIEW=C:Program Files (x86)XnViewxnview.exe
set SUBLIME=C:Program FilesSublime Text 3sublime_text.exe
set FOOBAR=C:Program Files (x86)foobar2000foobar2000.exe

call :assoc_ext "%SUBLIME%" txt md js json css java sh yaml
call :assoc_ext "%XNVIEW%" png gif jpg jpeg tiff bmp ico
call :assoc_ext "%FOOBAR%" flac fla ape wav mp3 wma m4a ogg ac3

goto :eof

:assoc_ext
  set EXE=%1
  shift
  :loop
  if "%1" neq "" (
    ftype my_file_%1=%EXE% "%%1"
    assoc .%1=my_file_%1
    shift
    goto :loop
  )
goto :eof

Script final para macOS (.sh)

#!/bin/bash

# this allows us terminate the whole process from within a function
trap "exit 1" TERM
export TERM_PID=$$

# check `duti` installed
command -v duti >/dev/null 2>&1 || 
  { echo >&2 "duti required: brew install duti"; exit 1; }

get_bundle_id() {
    osascript -e "id of app """ || kill -s TERM $TERM_PID;
}

assoc() {
    bundle_id=$1; shift
    role=$1; shift
    while [ -n "$1" ]; do
        echo "setting file assoc: $bundle_id .$1 $role"
        duti -s "$bundle_id" "." "$role"
        shift
    done
}

SUBLIME=$(get_bundle_id "Sublime Text")
TEXT_EDIT=$(get_bundle_id "TextEdit")
MPLAYERX=$(get_bundle_id "MPlayerX")

assoc "$SUBLIME" "editor" txt md js jse json reg bat ps1 cfg sh bash yaml
assoc "$MPLAYERX" "viewer" mkv mp4 avi mov webm
assoc "$MPLAYERX" "viewer" flac fla ape wav mp3 wma m4a ogg ac3

Fuente: habr.com

Añadir un comentario