pete schrieb:
-df funktioniert bei mir nicht!
Selbstverständlich funktioniert es - nur kannst du es auch weglassen, weil das ausschliesslich die MacOS-Classic-Variante des Programms betrifft und unter X ohnehin 'Default' ist. Dort läuft nämlich die Unix-Version, nicht die obsolete MacOS-Variante von InfoZip.
Ausserdem: "man zip" sagt:
-df [MacOS] Include only data-fork of files zipped into the archive. Good for exporting files to foreign operating-systems. Resource-forks will be ignored at all.
Richtig gelesen. Ignoriert, nicht hinzugefügt. Das genaue Teilgegen also.
Die korrekte zusätzliche Option zum weglassen von .DS_Store Dateien wäre:
-x .DS_Store
Das funktioniert aber nur bei direkter Angabe von zu packenden Dateien, beim rekursiven durchforsten von Unterordnern klappt das auch nicht. (In meinen Augen ein Bug...)
Die korrekte Option zum Hinzufügen von Resourceforks in ZIPs gibt es nicht. Der Grund dafür ist, dass das Format ZIP einfach keine Multifork-Dateien beherrscht. Um diesen Trick dennoch hinzubekommen, verwendet der Finder eine bestimmte Namenskonvention beim Anlegen von zusätzlichen Unterordnern innerhalb des Archivs, in diesen zusätzlichen Ordnern werden die vorher von der Datei abgespaltenen Resourceforks dann abgelegt - analog zu ihren zugehörigen Datenzweigen. Beim Entpacken werden diese Namensstrukturen erkannt und die Dateien wieder zusammengefügt (durch FixUpResourceForks).
(Die Resourceforks werden dabei in ._* AppleDouble-kodierte Dateien umgesetzt, genau so wie das auch auf Volumes geschieht, die keine Resourceforks können, zB FAT-Volumes. Der Unterschied ist im ZIP nur, dass diese separat innerhalb von einheitlich mit "__MACOSX" benannten Ordnern landen und nicht direkt neben dem Datenzweig der Datei.)
Das Terminalkommando zip kann das aber nicht alleine. Wollte man diesen Effekt erreichen, wäre es nötig, 'zip' zB durch ein (nicht gerade banales) Skript zu subtituieren, welches die entsprechenden Vorgänge transparent vornimmt, das Resultat schliesslich an das Originalprogramm zip weiterreicht und dem Benutzer dann das Ergebnis präsentiert.
Sowas zu schreiben ist unnötig - 'ditto' hat genau sowas schon eingebaut. Wer Resourceforks im ZIP braucht, soll einfach ditto einsetzen. Das ist übrigens so clever, auch noch weitere Mac-spezifische Metadaten wie Zeitstempel oder bestimmte wichtige HFS-Flags mit einzupacken (Bundle-Bit, Custom-Icon Bit, Template Bit, Finder-Labels usw...).
ditto kann das wahlweise mit ZIP (genauer: PKZip) oder aber auch GNU-ZIP (*.gz) Archiven als Ausgabeformat erledigen.
Leider besitzt ditto keine Option zum weglassen bestimmter Dateien nach Name.
Wenn man sowas haben möchte, sich aber die UNIX-Fossile und hochkomplexen Packsysteme 'pax', 'cpio' oder den deFacto-Standard 'tar' nicht antun will, muss man eben die Namensfilterung mittels der Shell selbst durchführen (zB mit 'find') und das Resultat über eine Pipe zu ditto schicken.
Wem das nichts sagt, dem sei *dringend* empfohlen, auf eins der vielen GUI-Frontends zurückzugreifen, die sowas auch für Otto N. Ormalverbraucher (ohne Unix-Grundkenntnisse) auf bequeme Weise anbieten.
(Dann klappts auch mit Aliasen, symbolischen Links und ähnlichen Fussangeln, die schon so manches ZIP unbrauchbar gemacht haben...)
Anm: Die Programme aus der StuffIt-Linie können das latürnich auch. Kostet halt.