web-dev-qa-db-ja.com

Mac OSXは、コマンドラインでファイルごとにファイルの関連付けを変更します

コマンドラインを使用して、特定のファイルに関連付けられているアプリケーションをバッチ変更する必要があります。特定のファイル拡張子のファイルの関連付けを変更するのではなく、実際には、特定のファイルをターゲットにして、そのファイルタイプのデフォルトの関連付けとは異なるアプリケーションで開くことを検討しています。このファイル拡張子のデフォルトのアプリケーションを全体的に変更したくはありません。ターゲットとする特定のファイルだけを変更します。

現在、Finderで変更するすべてのファイルを選択し、option + command + iを押して開いて複数のファイルの情報を取得し、それらのファイルのアプリケーションを変更しています。ちょっと面倒です。

10
Rob

この情報は、ファイルのリソースフォークウィキペディア )に保存されます。これらのリソースフォークは、拡張属性ウィキペディア )として公開されています。

$ ls -l@ somefile.txt 
-rw-r--r--  1 danielbeck  staff  0 18 Mär 19:00 somefile.txt

# setting non-default application using Finder

$ ls -l@ somefile.txt 
-rw-r--r--@ 1 danielbeck  staff  0 18 Mär 19:01 somefile.txt
        com.Apple.ResourceFork  1338 

ゼロから編集するのはおそらくかなり苦痛です-たくさんのバイナリデータ:

$ xattr -p com.Apple.ResourceFork somefile.txt 
00 00 01 00 00 00 05 08 00 00 04 08 00 00 00 32
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 04 04 00 00 00 32 2F 55 73 65 72 73 2F 64
61 6E 69 65 6C 62 65 63 6B 2F 41 70 70 6C 69 63
61 74 69 6F 6E 73 2F 53 75 62 6C 69 6D 65 20 54
65 78 74 20 32 2E 61 70 70 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 01 00 00 00 05 08
00 00 04 08 00 00 00 32 0C 00 00 00 C0 05 00 00
00 1C 00 32 00 00 75 73 72 6F 00 00 00 0A 00 00
FF FF 00 00 00 00 19 00 00 00

ただし、これらのリソースフォークはファイルのように扱うことができます。例えば:

$ open somefile.txt # opens in Sublime 2
$ cp somefile.txt/..namedfork/rsrc openInSublime2rsrc
$ open otherfile.txt # opens in TextEdit
$ cp openInSublime2rsrc otherfile.txt/..namedfork/rsrc
$ open otherfile.txt # opens in Sublime 2

/..namedfork/rsrcは、リソースフォークがPOSIXアプリケーション(つまり、ターミナルで行うすべてのこと)に公開される方法です。

したがって、既存のリソースフォークから1つの「テンプレート」ファイルを作成する必要があります(この例ではopenInSublime2rsrc)、後で他のファイルにコピーできます。

6
Daniel Beck

上記のDanielBeckの回答から、この情報は実際にファイルのリソースフォークに格納されています。 Appleは、開発ツールで「Rez」と「DeRez」と呼ばれる2つのユーティリティを提供します。これにより、リソースフォークを操作できます。特に、Rezを使用してリソースフォークをファイルにプッシュできます。

コマンドラインから単一のファイルの関連付けを変更するには、最初に適切なタイプのファイルを作成し、それを開くアプリケーションへの関連付けを手動で変更します。これにより、ファイルにリソースフォークが作成されます。これを行うと、コピーする情報がなくなります。次に、次のようにDeRezでリソースフォークを引き出します(ファイルfoo.txtを想定し、使用するアプリケーションがFirefox.appであると想定します)。

DeRez foo.txt > foo.r

これにより、逆コンパイルされたリソースフォークであるfoo.rというファイルがテキストファイルとして作成されます。次のようになります。

data 'usro' (0) {
    $"0000 001A 2F41 7070 6C69 6361 7469 6F6E"            /* ..../Application */
    $"732F 4669 7265 666F 782E 6170 7000 0000"            /* s/Firefox.app... */
    $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */

ゼロから作成したい場合はこれを編集できますが、フォーマットを取得する必要があります正確に正しくないと機能しません。必要なアプリバンドルへのパスを表す16進数でエンコードされた文字であり、ゼロで終了します。

リソースフォークが空で初期化されていないことを示すメッセージが表示される場合があります。その場合は、ソースファイルのファイルごとの関連付けを変更していないため、変更してから、DeRezコマンドを再実行する必要があります。

これを入手したら、次のようにこれを別のファイルにプッシュできます(bar.txtが存在すると仮定)。

Rez foo.r -a -o bar.txt

これにより、foo.rのリソースフォークでbar.txtが更新されます。

RezもDeRezもエラーメッセージを出力しないため、正常に機能したことを確認するには、次のようにします。

DeRez bar.txt

以前と同じ情報が表示されます。その後、通常どおりにファイルbar.txtを開くだけで、デフォルトのアプリケーションではなく、正しいアプリケーションで開くはずです。

バッチ変更を行うには、.rファイルを取得したら、次のような標準のワイルドカード展開を使用できます。

Rez foo.r -a -o *.txt

これにより、ワイルドカードに一致するすべてのファイルが実行されます。

私はこれを10.7で実行しましたが、これは以前のマシンでも機能することを理解しています。

5
mauvedeity

xattr を使用して実行しました(APFSボリュームで完全に機能します)

xattr -wx com.Apple.LaunchServices.OpenWith \
"`xattr -px com.Apple.LaunchServices.OpenWith FILEWITHGOODTYPE`" FILETOCHANGE

これを参照してください もっと必要な場合はトピック

3
Santa Claus

特定のタイプの特定の(サブ)ファイルセットに関連付けられたアプリケーションを「バッチ変更」したいとします。そのファイルタイプのすべてのインスタンスをその新しいアプリケーションに変更したくないため、サブセット。

ただし、これを行う簡単な方法はありません。 LaunchServicesがファイルを開くように指示する必要があるアプリケーションを見つける方法は多段階のプロセスであり、さまざまなスコープ(ユーザー、システムなど)の設定によって異なります。

ただし、コマンドラインでopenを使用して、今回は特定のアプリを使用するように指示することができます。これによって関連付けが変更されることはありませんが、特定のアプリケーションで一連のファイルを開くという、希望どおりの結果が得られます。

open -a <appbundle> <somefile> <anotherfile>

お気に入り

shiny:t fl$ ls -l
total 1848
-rwxr-xr-x  1 fl  staff    1795 Mar 18 20:03 distribution.pl
-rw-r--r--  1 fl  staff  939264 Mar 18 20:03 objectreport.txt
shiny:t fl$ open -a TextWrangler distribution.pl objectreport.txt

そして、コマンドラインから完全に離れて:このユーティリティを見てください: http://michelf.com/software/magic-launch/

1
Florenz Kley