OS X에서 파일 형식과 관련된 기본 앱을 더 빠르게 변경하는 방법이 있습니까?


13

RCDefaultApp 또는 Magic Launch 를 사용하거나 Finder의 정보 패널에서 모두 변경 버튼을 반복해서 누르는 것보다 편리한 것이 있습니까?

Info.plist 파일에서 CFBundleDocumentTypes 배열을 수정하는 쉘 스크립트 작성에 대해 생각했습니다. 그러나 각 앱에는 변경해야 할 여러 키 (때로는 아이콘)가 있습니다.

lsregister Launch Services 데이터베이스를 구체적으로 수정하는 데 사용할 수 없습니다.

$ `locate lsregister` -h
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
  -convert  Register apps found in older LS database files
  -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
  -dump     Display full database contents after registration
  -h        Display this help

멋진 작업 Lauri, 인터넷은 Cmd-i, Change All을 제안하는 사람들로 가득합니다. duti다음에 수십 가지 파일 형식을 다시 등록하는 다른 앱을 사용해 볼 때 소용돌이를 줄 것 입니다.
ocodo

답변:


12

듀티

  1. pkg 설치 프로그램을 다운로드하거나 소스에서 컴파일
  2. 다음과 같은 파일을 어딘가에 저장하십시오.

    com.macromates.textmate public.shell-script all
    com.macromates.textmate public.unix-executable all
    com.macromates.textmate com.apple.property-list all
    org.videolan.vlc .avi all
    org.videolan.vlc .mkv all
    # ...
    
  3. duti $file.duti

번들 식별자 또는 UTI 찾기 :

bundleid() {
  osascript -e "id of app \"$*\""
}

getuti() {
  local f="/tmp/me.lri.getuti.${1##*.}"
  touch "$f"
  mdimport "$f"
  mdls -name kMDItemContentTypeTree "$f"
  rm "$f"
}

lsapps

내가 알기 전에 duti와 비슷한 루비 스크립트를 작성했습니다. 변경 사항을 적용하려면 OS를 다시 시작해야합니다. 또한에 대한 외부 변경 사항을 덮어 씁니다 com.apple.LaunchServices.plist.

#!/usr/bin/env ruby

datafile = "#{ENV['HOME']}/Notes/lsapps.txt"
cachedir = "#{ENV['HOME']}/Library/Caches/me.lri.scripts"
cachefile = cachedir + "/lsapps"
`mkdir -p #{cachedir}; touch #{cachefile}`
cachetext = IO.read(cachefile)

a = []
IO.readlines(datafile).each do |line|
  line.strip!
  next unless line =~ /^([^#].*): (.+)/
  z = $1, $2

  bid = cachetext.scan(/#{z[0]}  (.*)/)[0]
  unless bid
    bid = `osascript -e 'id of app "#{z[0]}"'`.chomp
    next unless bid
    File.open(cachefile, "a") { |f| f.puts(z[0] + "  " + bid) }
  end

  z[1].strip.split(" ").each do |e|
    if e =~ /(.+):\/\/$/
      a << "{LSHandlerURLScheme='#{$1}';LSHandlerRoleAll='#{bid}';}"
    elsif e.include?(".")
      a << "{LSHandlerContentType='#{e}';LSHandlerRoleAll='#{bid}';}"
    else
      a << "{LSHandlerContentTag='#{e}';LSHandlerContentTagClass=\
'public.filename-extension';LSHandlerRoleAll='#{bid}';}"
    end
  end
end

system("defaults", "write", "com.apple.LaunchServices", "LSHandlers",
"(" + a.join(",") + ")")

`defaults write com.apple.LaunchServices LSQuarantine -bool false`

lsapps.txt

NetNewsWire Lite: feed:// public.rss
iCal: icaltodo icalevent
Google Chrome: chrome://
Safari: public.html
TextEdit: txt text md markdown csv
TextMate: public.shell-script public.unix-executable public.script ssh:// xml plist dict css rst tex sh pl py rb gemspec php js java c h m conf bash opml as cfm cfml class coffee ctp erb rhtml haml less msass scss yaml rd
VLC: avi mpg flv mkv mp4 flac 3gp
The Unarchiver: rar
Skim: pdf
iChm: chm
AppleScript Editor: scpt
Sequential: png jpg


댓글 @kopischke에 의해 ... 일부의 경우, 운영 체제를 다시 시작입니다 하지 duti의 사용 다음이 필요합니다.
Graham Perrin

2
@GrahamPerrin 나는 내 자신의 루비 스크립트 (duti 아님)를 다시 시작해야한다는 것을 의미했다. 실제로 pti를 다시 시작하거나 덮어 쓸 필요가 없기 때문에 실제로 duti로 전환했습니다.
Lri

1

스크립팅없이 모든 AVI를 여는 응용 프로그램을 쉽게 변경할 수 있습니다. AVI 파일을 찾아서 정보를 얻습니다. 파일 정보가 표시됩니다. 파일을 열 프로그램을 선택한 다음 "모두 변경 ..."버튼을 클릭하십시오. 기본 연결을 변경하라는 메시지가 표시됩니다. 여기에 이미지 설명을 입력하십시오

작은 지점과 마찬가지로 리소스 포크는 단계적으로 중단되지 않지만 제작자 코드는 단계적으로 종료됩니다. 따라서 최신 Mac OS 시스템에는 파일을 여는 방법에 대한보다 유연한 시스템이 있습니다. 응용 프로그램은 리소스 포크가없는 파일에서 작동하지만 일부 응용 프로그램에서는 여전히 사용합니다.


1
정보 대화 상자에서 기본 앱을 변경하려면 약 10 개의 마우스 또는 키보드 동작이 필요합니다. 처음 몇 백 번 정도 후에는 성가신 일입니다.
Lri

이 경우 사이트의 다른 곳 에서이 답변을 참조하십시오 . 명령 행 배치 변경을 수행하는 방법이 표시됩니다.
mauvedeity

링크 된 답변은 리소스 포크에서 단일 파일의 기본 앱을 변경하는 것에 관한 것입니다. 기존의 모든 파일의 리소스 포크를 수정하더라도 파일의 기본 앱은 변경되지 않습니다. 미래.
Lri
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.