Archive Assistant

Archive Assistant (Script)

Translation available: English English
Dieses AppleScript-Script hilft definitiv beim Erstellen von Archiven und Disk-Images (dmg) aller Art.

Das Script ist eins von denen, das ich fast täglich benutze, und zwar aus folgendem Grund: Es gibt mir über die Menüleiste Zugriff auf alle wichtigen und sinnvollen Archivtypen und dmg, wie ich es in dieser Form seltsamerweise noch bei keinem anderen Script oder Programm gefunden habe.

Update 28 Apr 2017 @ 2 h Letzte Script-Änderungen siehe am Ende des Beitrags.

Das Script kann folgende Archive/Images erstellen:

  • tar, unkomprimiert
  • tar, gzip-komprimiert (tar.gz)
  • tar, bzip2-komprimiert (tar.bz2)
  • tar, lzma2-komprimiert (tar.xz)
  • xar, unkomprimiert
  • xar, gzip-komprimiert
  • xar, bzip2-komprimiert
  • zip (zwei Varianten)
  • 7z (lzma2)
  • dmg, read/write
  • dmg, read-only
  • dmg, zlib-komprimiert
  • dmg, bzip2-komprimiert
  • dmg, lzfse-komprimiert
  • dmg, Sparse-Image
  • dmg, Sparse-Bundle

… und noch einiges mehr:

  • Dateien zu tar-, cpio-, pax-, zip-, 7z-Archiven hinzufügen.
  • Dateien zu Read-only- oder komprimierten dmg via Shadow-File hinzufügen („shadow mount“).
  • Konvertieren zwischen verschiedenen dmg-Formaten.
  • Einstellbare dmg-Größe.
  • Zip, 7z und alle dmg-Typen optional AES-verschlüsselt.
  • Ändern des Passworts eines dmg.
  • Wählbare Komprimierungsstufen für Archive und dmgs.
  • Detaillierte Settings für lzma2-Komprimierung (xz und 7z), einschließlich Dictionary-Size, Word-Size, Multi-/Singlethreading, Solid/Non-solid/Solid by Filetype.
  • Möglichkeit, die fertig komponierte Befehlszeile ins Terminal zu kopieren, für eventuelle weitere Ad-hoc-Einstellungen (siehe unten).

Der konkrete Anlass, das Script zu schreiben, war eine unangenehme Überraschung mit einem kommerziellen Mac-Programm: Beim Archivieren wurden sämtliche Metadaten (Extended Attributes, wie z.B. Tags) unangekündigt vernichtet.

Deshalb war ein wesentlicher Punkt des Scripts, dass bei allen Archivierungsmethoden die Mac-typischen Metadaten vollständig erhalten bleiben sollen.

Später habe ich zwei Methoden dazugefügt, die nicht Metadaten-kompatibel sind (7z und zip via p7zip). Diese sind im GUI explizit mit „No Metadata“ markiert und sind für zwei Sonderfälle gedacht:

  • Wenn AES-verschlüsselte zip- bzw. 7z-Archive benötigt werden.
  • Wenn die Archive für Plattformen bestimmt sind, die Mac-Metadaten nicht lesen können (z.B. Windows). Der Empfänger hat nach dem Entpacken saubere Dateien ohne die sonst üblichen "._"-Multipart-Relikte.

Benutzung

Ich habe eine detaillierte Anleitung geschrieben, die auch aus dem GUI heraus abrufbar ist.

Hier eine Kurzform:

  1. Script runterladen und ins User-Scripts-Verzeichnis ~/Scripts/ legen, sodass es über das Script-Menü in der Menüleiste aufrufbar ist.

    Archive Assistant: Scripts in menu bar

  2. Eine oder mehrere Dateien/Ordner im Finder selektieren und das Script starten.
  3. Archiv-Typ wählen.

    Archive Assistant: Archive type

  4. Einstellungen wählen. Durch Gedrückthalten der ⌘-Taste können mehrere Optionen angeklickt werden. (Gewählte Optionen bleiben fürs nächste Mal gespeichert.) Wenn nichts selektiert ist, werden die Default-Einstellungen verwendet.

    Archive Assistant: Options

  5. Zielverzeichnis wählen.

    Archive Assistant: Destination

Das GUI ist kontextsensitiv und zeigt nur Optionen, die für die ausgewählte Datei sinnvoll sind. Ist im Finder z.B. ein dmg ausgewählt, zeigt es diese Optionen …

Archive Assistant: dmg options

… bei einem tar- oder cpio-Archiv diese:

Archive Assistant: tar options

Das Script läuft verdeckt Hintergrund und gibt nach Beendigung den Status aus.

Wie im dritten Screenshot sichtbar kann aber jeder Archivierungsvorgang wahlweise auch „offen“ im Terminal ausgeführt werden:

  • Run in Terminal: Alle Befehle werden mit maximaler Verbosity ausgeführt und ans Terminal geschickt. Sinnvoll bei großvolumigen Archivierungsaktionen, um den Fortschritt im Auge zu behalten, oder zum Aufspüren von Fehlern.
  • Paste into Terminal: Das Script kopiert die ganze Befehlszeile mit allen im GUI gewählten Optionen ins Terminal, aber ohne diese auszuführen. Das ist sehr praktisch, wenn wir in speziellen Fällen eine Detaileinstellung ändern möchten, die im GUI nicht vorgesehen ist.1

Download (1.2.1 / 2017-04-28)

Technisches

Kompatibilität: Yosemite, El Capitan, Sierra.

Das Script-Bundle enthält die folgenden Tools:

  • p7zip, ein Port von 7-zip. Das Script verwendet p7zip nicht nur für 7z-Archive sondern auch für gz, bz2, xz und teilweise zip, da es multi-threaded, schneller und effizienter arbeitet als die entsprechenden Unixtools.

Des weiteren benutzt es diese mit macOS vorinstallierte Tools:

  • hdiutil
  • tar
  • xar
  • ditto
  • pax


Änderungen
1.2.1 [2017-04-27]
  • LZMA2 (xz) compression of existing tar archives works again.
  • Archive extension now appended to the file extension. (Previously the file extension was replaced.)
  • Most dialogs now displayed by frontmost application.
  • More explanatory texts for the list prompts.
  • Passwort entry for encrypted archives/images more robust.
1.2.0 [2017-04-23]
  • Minor code cleanup.
  • Minor UI text changes.
  • Added note to the manual about existing archives with the same name/path.
1.2.0b2 [2017-01-30]
  • Removed ASObjC-Runner dependencies --> Script compatible with macOS Sierra now.
  • Last used settings now handled by NSUserDefaults --> Script now requires OS X 10.10 (Yosemite) or newer.
  • Script bundle and distribution disk image code signed.
  • Added Apple’s new LZFSE compression for disk images (only OS X 10.11 (El Capitan) or newer.).
  • Updated included 7za binary to ver 16.02.
  • Added dictionary sizes 384MiB and 1536MiB (new maximum) for all LZMA2 actions.
  • Added “Max. 2 Threads” options to all actions that use 7za (better compression than fully multithreaded).
  • Slightly changed the selectable word sizes for LZMA2.
  • Changed fallback compression level (when none is selected) from 6 to 5.
  • Added notification via Notification Center when script has started.
  • 7zip Help now opens the online documentation.
  • hdiutil Help now opens the man page in Preview.
  • Updated the manual.
  • Fixed a bug that prevented the options window from appearing when a disk image resizing action was selected.
  • More descriptive error message when an archive with the same name already exists at the destination and we cannot append.
  • Added error message when shadow file could not be found.
  • Selection lists now frontmost.
  • Changed many message boxes and dialogs and some list entries.
1.1.3 [2016-04-13]
  • Removed invalid parameters -mtm, -mtc and -mta for .tar.xz (incompatible since 7z 15.09).
1.1.2 [2016-03-29]
  • Updated 7za. (Previous version no longer produced solid archives on El Capitan.).
1.1.1 [2015-03-24]
  • Recompiled 7za.
1.1.0 [2015-02-19]
  • More precise archive designations in the GUI.
  • Added longer delay to Terminal paste function, since on Yosemite sometimes the Terminal was too slow to open timely.
  • Added missing Terminal options when “Add to Existing Archive” was selected and the target archive is tar, cpio or pax.
1.0.0 [2014-10-03]
  • Fixed an issue with dmg shadow mounting.
  • 7za updated.
0.9.1 [2014-02-11]
  • The file dialog window in “Add to archive” now works with the application “Default Folder”, if installed.
0.9.0 [2014-02-11]
  • Replaced all cpio options by tar. Why? Cpio had the advantage to accept long filenames, contrary to ustar. Tar/ustar (as in pax) had the huge advantage to conserve hard-linked files, but it breaks with long filenames, which makes it unreliable. Now I found out that OS X’s tar (bsdtar) does handle long file names correctly, while at the same time conserving hard links and xattr like ustar. So, it seems to be the best of both worlds.
  • Eliminated a bug where the creation of non-compressed archives failed if in the previous run two list options had been selected (for example a compression level and “Run in Terminal”).
  • Discovered a problem with xar and updated the description accordingly (concerns hard-linked files).
0.8.5 [2014-01-28]
  • Removed the cpio.7z from the list of formats because the presence of two LZMA2 formats (.xz, .7z) caused confusion among some users. To reenable it just copy the commented line in the script back into the list section.
0.8.4 [2013-11-17]
  • ditto now again with --keepParent (cpio, zip). Otherwise top-level tags/comments may get lost at expansion. The property can be configured in the script.
0.8.3 [2013-11-13]
  • Now renaming works also for dmg conversion without shadow files, if source and target are in the same folder.
0.8.2 [2013-06-13]
  • “cpio – No Compression” works again (sometimes?).
0.8.1 [2013-06-02]
  • Small fixes.
0.8.0 [2013-06-02]
  • Major cleanup.
  • New: Remembers last archive type.
  • Fixed: Preservation of cpio, tar, pax suffixes if archive is compressed afterwards.
  • Added: hdiutil conversion to all image formats.
  • Added: hdiutil resize, compact .
  • Updated description.
0.7.2 [2013-06-01]
  • Fixed: Default archive type.
  • Modified: hdiutil script for encryption.
  • Modified: hdiutil chpass script .
  • Uses ASObjC Runner now to show progress bar and other stuff.
  • Shows elapsed time.
  • Source name extension excluded from archive name.
  • Changed: removed --keepParent from ditto zip.
  • Added: hdiutil conversion to zlib dmg.
0.7.1 [2013-05-31]
  • Added: Disk Image Info.
  • Added: Change password for encrypted Images.
  • Modified: hdiutil script for encryption.
0.7.0 [2013-05-21]
  • All essential functions implemented.
  • Documentation updated.

Footnotes

  1. Wenn wir beispielsweise statt lzma2 eine PPMD-Komprimierung verwenden wollen, starten wir das Script und setzen alle gewünschten Optionen wie gewöhnlich, plus „Paste into Terminal“. Wir erhalten die komplette, vorkomponierte Befehlszeile im Terminal und müssen nur noch lzma2 durch ppmd ersetzen und den Befehl starten.