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


10

コマンドラインを使用して、特定のファイルに関連付けられているアプリケーションを一括変更する必要があります。特定のファイル拡張子のファイルの関連付けを変更するつもりはありません。実際には、特定のファイルを対象として、そのファイルの種類の既定の関連付けとは異なるアプリケーションで開くようにしています。対象とする特定のファイルについてのみ、このファイル拡張子全体のデフォルトアプリケーションを変更したくありません。

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

回答:


6

この情報は、ファイルのリソースフォークWikipedia)に格納されます。これらのリソースフォークは、拡張属性として公開されていますWikipedia)。

$ 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アプリケーションに公開される方法です(つまり、ターミナルで行うすべてのこと)。

そのため、既存のリソースフォーク(この例ではopenInSublime2rsrc)から「テンプレート」ファイルを1つ作成するだけで、後で他のファイルにコピーできます。


1
このソリューションは、Lionまで機能しました。file / rsrcにコピーすると、「:ディレクトリではありません」というエラーが表示されます。スクエアワンに戻る:(
Rob

1
@Rob somefile.txt/..namedfork/rsrc代わりに使用してみてください。somefile.txt/rsrcしばらく前に廃止されました。
ダニエルベック

ダニエル・ベック-あなたは命の恩人です。どうもありがとうございました。
Rob

リソースフォークを直接編集する必要はありません。以下の私の回答を参照してください。ただし、要約すると、RezおよびDeRezというユーティリティを使用してリソースフォークを編集できます。これらはサポートされている開発者ツールなので、問題が発生する可能性は低くなります。
mauvedeity

5

上記のDaniel Beckの回答からピックアップすると、この情報は実際にファイルのリソースフォークに格納されます。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"            /* ................ */

これを最初から作成したい場合は編集できますが、形式を正確に取得する必要があります。そうしないと機能しません。ゼロで終了する、必要なApp Bundleへのパスを表す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でこれを行いましたが、これは以前のマシンでも動作することを理解しています。


これらのツールに関する興味深い情報。それでも、これらのツールはアクセス..namedfork/rsrcしても実行されないことを何も実行していないように見えますよね?(準)内部構造についての必要な知識を特定のツールについての知識と交換します—これはより良いとは思いません。
ダニエルベック

@DanielBeck私が知る限り、あなたは正しいです。ただし、アップスレッドで述べたように、内部情報はLionで変更されましたが、これらはバージョンに依存しない安定した開発ツールです。個人的には内部的なものは面白いと思いますが、ツールはクロスプラットフォームで動作する可能性が高いので、サポートされているツールを使用したいと思います。
mauvedeity


1

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

ただし、これを行う簡単な方法はありません。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/


あなたの具体的な例でopen -a TextWrangler *は、さらに速くなります。
ダニエルベック

はい、しかしそれは説明にシェルのワイルドカード展開のレイヤーを追加し、そのため例が理解しにくくなります:-) openにはそれほど悪くありませんが、ワイルドカードの問題を招く他のツールがあります...
Florenz Kley
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.