OS X'te dosya türleriyle ilişkili varsayılan uygulamaları değiştirmenin daha hızlı bir yolu var mı?


13

RCDefaultApp veya Magic Launch kullanmaktan veya Finder'ın bilgi panellerindeki Tümünü Değiştir düğmelerine tekrar tekrar basmaktan daha uygun bir şey var mı ?

Info.plist dosyalarında CFBundleDocumentTypes dizilerini değiştirecek bir kabuk komut dosyası yazmayı düşündüm. Ancak her uygulamada değiştirilmesi gereken birden fazla tuş (bazen bir simge) bulunur.

lsregister Başlatma Hizmetleri veritabanında belirli değişiklikler yapmak için kullanılamaz.

$ `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

Harika bir çalışma Lauri, net Cmd-i, Tümünü Değiştir'i öneren insanlarla çalkalanıyor. dutiBir dahaki sefere onlarca dosya türünü yeniden kaydeden başka bir uygulamayı denediğimde bir koşuşturma vereceğim .
ocodo

Yanıtlar:


12

Duti

  1. Pkg yükleyicisini indirin veya kaynaktan derleyin
  2. Aşağıdaki gibi bir dosyayı bir yere kaydedin:

    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

Paket tanımlayıcılarını veya UTI'leri bulma:

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

Bunu öğrenmeden önce duti'ye çok benzer bir Ruby senaryosu yazdım. Değişiklikleri uygulamak için işletim sisteminin yeniden başlatılmasını gerektirir. Ayrıca, üzerinde yapılan harici değişikliklerin üzerine yazar 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


Yorumlananlar @kopischke tarafından ... bazı durumlarda, işletim sisteminin bir yeniden başlatma edilir değil Duti kullanımını takiben gerekli.
Graham Perrin

2
@GrahamPerrin Kendi Ruby betiğimin (duti değil) yeniden başlatılması gerektiğini kastetmiştim. Aslında duti'ye geçtim çünkü plist'in yeniden başlatılmasını veya üzerine yazılmasını gerektirmiyor.
Lri

1

Komut dosyası gerektirmeden tüm AVI'leri hangi uygulamanın açacağını kolayca değiştirebilirsiniz. Bir AVI dosyası bulun ve üzerinde Bilgi Alın. Bu size dosya bilgilerini gösterecektir. Dosyaları açmak istediğiniz programı seçin, ardından "Tümünü Değiştir ..." düğmesini tıklayın. Bu, varsayılan ilişkilendirmeyi değiştirmenizi ister. resim açıklamasını buraya girin

Küçük bir nokta gibi, kaynak çatalları aşamalı olarak kaldırılmıyor, ancak içerik oluşturucu kodları. Bu nedenle, yeni Mac OS sistemleri, dosyaların nasıl açılacağını öğrenmek için daha esnek bir sisteme sahiptir. Uygulamaların kaynak çatalları olmayan dosyalar üzerinde çalışması gerekir, ancak bazı uygulamalar hala bunları kullanır.


1
Bir bilgi iletişim kutusundan varsayılan uygulamanın değiştirilmesi yaklaşık 10 fare veya klavye işlemi gerektirir. İlk birkaç yüz defadan sonra oldukça can sıkıcı oluyor.
Lri

Bu durumda, sitenin başka bir yerinde bu yanıta bakın , size bir komut satırı toplu değişikliğinin nasıl yapılacağını gösterir.
mauvedeity

(Bağlantılı yanıt, tek bir dosyanın varsayılan uygulamasını kaynak çatalıyla değiştirmekle ilgilidir.) Mevcut tüm dosyalarımın kaynak çatallarını değiştirsem bile, dosyadaki varsayılan dosya uygulamalarını değiştirmez geleceği.
Lri
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.