3

xattrを使用してOSX上のSafariでダウンロードしたディスクイメージから元のダウンロードURLを抽出するスクリプトを作成しようとしています。これにより、名前を変更しながら、参照用に元の名前を簡単に取得できます。

このコマンドは、例として、指定されたファイルがダウンロードされたURLの16進表現を出力します。

xattr -p com.apple.metadata:kMDItemWhereFroms *.dmg

与える

62 70 6C 69 73 74 30 30 A1 01 5F 10 4F 68 74 74
70 3A 2F 2F 61 64 63 64 6F 77 6E 6C 6F 61 64 2E
61 70 70 6C 65 2E 63 6F 6D 2F 4D 61 63 5F 4F 53
5F 58 2F 6D 61 63 5F 6F 73 5F 78 5F 31 30 2E 36
2E 31 5F 62 75 69 6C 64 5F 31 30 62 35 30 34 2F
30 34 31 35 30 37 33 61 2E 64 6D 67 08 0A 00 00
00 00 00 00 01 01 00 00 00 00 00 00 00 02 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 5C

URLは14バイト目(正しくカウントした場合)から始まり、NULLで終了します。次のように文字列出力を取得するように、この文字列をフォーマットするにはどうすればよいですか。

http://adcdownload.apple.com/Mac_OS_X/mac_os_x_10.6.1_build_10b504/0415073a.dmg

(心配しないでください。ADCにログインしていない限り、このリンクは機能しません)

...基本的に、FinderがGetInfoに表示するのと同じものです。xattrの出力をxxdにパイプしてみましたが、文字列が正しい場所から始まるようにオフセットを指定する方法がわかりません。

4

1 に答える 1

5

したがって、xattr -pによって返されるバイナリデータを調べた後、それが実際にはバイナリplistであることに気付きました...したがって、データの先頭に「bplist」があります。何らかの理由でこれまで気づかなかったのですが、これを踏まえて、10.5から10.8までのすべてのOSXで動作する適切なソリューションを次に示します。

重複を避けるために、ソースを貼り付けるのではなく、ソースにリンクします:https ://github.com/jakepetroules/wherefrom

于 2012-07-28T09:18:56.383 に答える