2017-11-17 4 views
0

Ich möchte mit XATTR einige Metadaten auf meine Dateien direkt auf den Dateien speichern. Dies sind im Wesentlichen Tags, die ich für die Kategorisierung von Dateien verwende, wenn ich nach ihnen suche. Mein Ziel ist es, die üblichen Mac OS X-Tags zu erweitern, indem jedem Tag weitere Informationen zugeordnet werden, beispielsweise das Datum des Hinzufügens dieses Tags und möglicherweise andere Dinge.Maximale Größe von XATTR in OS X

Ich dachte über die xattr -w einen XATTR zu den Dateien hinzufügen. Meine erste Schätzung würde sein, etwas wie ein JSON in diesem xattr Wert zu speichern, aber ich fragte mich

1) Was sind die Grenzen der Größe, die ich in einem xattr speichern kann? (Mann von xattr ist vauge und bezieht sich auf etwas namens _PC_XATTR_SIZE_BITS, die ich nirgends finden kann)

2) etwas falsch mit dem Speichern einer JSON-formatierten Zeichenfolge als xattr?

+0

Ich benutze das 'tag' Paket in ** homebrew ** und ich liebe es. Sie können Tags sehr einfach hinzufügen, löschen und aktualisieren und sie auch im Finder sehen. –

+0

Hallo, ich kenne das Paket, aber das funktioniert auf Standard-OS-X-Tags, die man sieht und in den Finder legt. Hier versuche ich einen neuen, angepassten Satz von Tags zu erstellen.Also muss ich 'xattr' benutzen, denke ich. In jedem Fall bleibt die Frage, wie groß die Daten im xattr sein können. –

+0

Es scheint, als 26 in '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers definiert werden/sys/unistd.h', aber ich glaube nicht, dass Sie 26 Bits speichern können, oder sogar die Größe davon kann nicht mehr als 26 Bits sein. Ich denke, dass, weil alle umgebenden "# definiert" sind fortlaufend um 26 nummeriert. –

Antwort

0

ich scheinen in der Lage zu sein, zumindest 260kB zu schreiben, wie dies durch 260kB von Nullen zu erzeugen und sie auf das Schreiben Umwandlung a so kann ich sie sehen:

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) 

Und sie dann mit zurückgelesen:

xattr -l fred 
myattr: aaaaaaaaaaaaaaaaaa...aaa 

Und überprüfen Sie die Länge zurückgegeben:

xattr -l fred | wc -c 
260009 

ich vermute, dieser Akt ually eine Grenze von argmax auf der Kommandozeile:

sysctl kern.argmax 
kern.argmax: 262144 

Auch, weil Sie 260kB in einem xattr speichern können, bedeutet das nicht, ist es ratsam. Ich weiß nichts über HFS +, aber auf einigen Unixy-Dateisystemen können die Attribute direkt im Inode gespeichert werden, aber wenn Sie ein bestimmtes Limit überschreiten, muss zusätzlicher Speicherplatz auf der Festplatte für die Daten reserviert werden.

---

Mit dem Aufkommen von High Sierra und APFSHFS+ zu ersetzen, müssen Sie auf beiden Dateisysteme testen - auch sicherstellen, dass Time Machine Rücken und auch die Daten wieder her und dass Dienstprogramme wie ditto, tar und der Finder sie beim Kopieren/Verschieben/Archivieren von Dateien propagieren.

Denken Sie darüber nach, was passiert, wenn Sie eine markierte Datei per E-Mail versenden oder auf einen FAT-formatierten USB Memory Stick kopieren.


Ich habe auch versucht, mehrere Attribute auf einer einzigen Datei und das folgende Skript erfolgreich schrieb 1000 Attribute (genannt attr-0, attr-1 ... attr-999), die jeweils von 260kB in einer einzigen Datei einstellen - was bedeutet, dass die Datei 260 MB effektiv trägt der Attribute:

#!/bin/bash 
for ((a=1;a<=1000;a++)) ; do 
    echo Setting attr-$a 
    xattr -w attr-$a "$(dd if=/dev/zero bs=260000 count=1 2> /dev/null | tr '\0' a)" fred 
    if [ $? -ne 0 ]; then 
     echo ERROR: Failed to set attr 
     exit 
    fi 
done 

Diese können alle gesehen und zurück gelesen werden - ich überprüfte.

+0

Hallo, das ist eine gute direkte Überprüfung, danke. Ich hatte gehofft, man könnte das von einer Manpage lesen, aber natürlich macht auch ein direkter Test den Trick. Einige nützliche Informationen darüber, wie man xattr erhalten kann, finden Sie hier https://www.lesboncomptes.com/pages/extatrs.html –

+0

Ich habe überprüft, dass 'cp' das xattr nicht speichert. In meinen Fällen ist das auch nicht der Fall. Es kann mit meiner Verwendung von GNU cp zusammenhängen. Das Erstellen eines "Duplikats" aus dem Finder oder Automator behält den XATTR bei, einschließlich des nicht-standardmäßigen, mit dem ich spiele. –

+0

... und ja, 'cp' von OS X (befindet sich in'/bin/cp') behält die xattrs standardmäßig –