2017-11-17 7 views
0

xattrを使用して、自分のファイルにいくつかのメタデータを直接ファイルに保存したいと考えています。これらは基本的に私がそれらを検索するときにファイルの分類に使用するタグです。私の目標は、通常のMac OS Xタグを拡張することです。例えば、そのタグを追加した日付や他のものなど、各タグに多くの情報を関連付けることです。OS Xのxattrの最大サイズ

私はxattr -wを使ってファイルにxattrを追加しようと考えていました。私の最初の推測は、このxattr値にJSONのようなものを保存することですが、私は疑問に思っていました

1)xattrに保存できるサイズの制限はありますか? (xattrの人はvaugeであり、どこでも見つけることができない_PC_XATTR_SIZE_BITSというものを参照しています)2)JSON形式の文字列をxattrとして保存すると何か問題がありますか?

+0

私は** homebrew **の 'tag'パッケージを使用しています。ファイルのタグを簡単に追加、削除、更新することができ、Finderでもタグを参照することができます。 –

+0

こんにちは、私はパッケージを知っていますが、それは標準のOS Xのタグ、あなたがFinderに表示して入れたもので動作します。ここでは、カスタマイズされた新しいタグセットを作成しようとしています。だから私は 'xattr'を使わなければならないと思います。いずれにしても、問題は残っています。 –

+0

'/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headersで26と定義されているようです/ sys/unistd.h'しかし、私はあなたが26ビットを格納することができる、またはそれのサイズさえも26ビットを超えることができないことを意味するとは思わない。私は周囲のすべての '#defined'が26の周りに順に番号が付けられているからだと思います。 –

答えて

0

私はので、私はそれらを見ることができヌルの260KBを生成し、手紙aにそれらを変換することによって、このような少なくとも260KB、で書くことができるように思われる:

xattr -w myattr "$(dd if=/dev/zero bs=260000 count=1|tr '\0' a)" fred 
1+0 records in 
1+0 records out 
260000 bytes transferred in 0.010303 secs (25235318 bytes/sec) 

そしてそれらをリードバック:

これは行為であり、私は疑う

xattr -l fred | wc -c 
260009 

xattr -l fred 
myattr: aaaaaaaaaaaaaaaaaa...aaa 

と返された長さをチェックしますコマンドラインでARGMAXのually制限:

sysctl kern.argmax 
kern.argmax: 262144 

また、あなたはそれが賢明であることを意味しませんよう、xattrで260KBを格納できるという理由だけで。私はHFS +についてはわかりませんが、Unixyファイルシステムでは、属性をiノードに直接格納することができますが、一定の限度を超えた場合は、ディスク上にデータ用に追加スペースを割り当てる必要があります。 HFS+を交換するハイシエラAPFSの出現により

---

、両方のファイルシステム上でテストしてください - また タイムマシンをバックアップして、データを同様に復元していることを確認し、 dittotar、Finderなどのユーティリティは、ファイルのコピー/移動/アーカイブ時にそれらを伝播します。

タグ付きファイルを電子メールで送信するか、FAT形式のUSBメモリースティックにコピーするとどうなるかを検討してください。


私はまた、単一のファイルに複数の属性を設定しようと、次のスクリプトが正常に単一のファイルに(attr-0と呼ばれ、attr-1 ... attr-999)千の属性260KBのそれぞれを書いた - ファイルが効果的に260メガバイトを運ぶことを意味します属性:

これらはすべて表示され、また読まれます。確認しました。

+0

こんにちは、これは良いダイレクトチェック、ありがとう。私は、マニュアルページからこれを読むことができればと思っていましたが、もちろん直接テストでもこのトリックを行います。 xattrを保存する方法に関するいくつかの有用な情報はここにありますhttps://www.lesbonscomptes.com/pages/extattrs.html –

+0

私は 'cp'を使ってxattrを保存していないことを確認しました。私の場合でも 'cp -a'はしません。私のGNU cpの使用に関連するかもしれません。 FinderやAutomatorから「複製」を作成すると、私が再生している非標準のものも含めて、xattrが保存されます。 –

+0

...はい、OS Xの 'cp'('/bin/cp'にあります)はxattrsをデフォルトで保存します –