Terminal pogryzł człowieka: patool

Około 35 programów do kompresji, co najmniej sześć razy tyle parametrów i wszystko w jednym narzędziu o nazwie patool. Wszystko po to, aby ułatwić nam obsługę pakowanie zawartości naszych katalogów, przepakowywanie, testowanie i inne atrakcje. A wszystko to w tekstowych okolicznościach naszego podręcznego terminala linuksowego.

Ciężko w kilku słowach zawrzeć wszystkie pozytywne zachwyty nad patool. Nie dość, że program występuj w standardowych repozytoriach, to na dodatek w kilku prostych opcjach umożliwia obsługę niemal całego bogactwa narzędzi do archiwizacji i kompresji. Założeniem patool jest ułatwienie nam życia, zatem po zainstalowaniu programu i wydaniu polecenia –help nie zostaniemy zasypani zestawem nieprzebytych opcji:

positional arguments:
  {extract,list,create,test,repack,recompress,diff,search,formats}
                        the archive command; type "patool COMMAND -h" for
                        command-specific help
    extract             extract one or more archives
    list                list members or one or more archives
    create              create an archive
    test                test an archive
    repack              repack an archive to a different format
    recompress          recompress an archive to smaller size
    diff                show differences between two archives
    search              search contents of archive members
    formats             show supported archive formats

I tylko tyle. Wypakuj (extract), spakuj (create), wylistuj zawartość (list), skompresuj ponownie (recompress), przepakuj do innego formatu (repack) to najważniejsze dla nas operacje. Dodatkowo mamy jeszcze możliwość podejrzenia obsługiwanych formatów (formats) – w zależności od zainstalowanych narzędzi do kompresji, sprawdzenia różnic pomiędzy archiwami oraz przetestowanie lub przeszukanie archiwum. No cóż, a gdzie tkwi wzmiankowana nietuzinkowość tego narzędzia? Proszę bardzo:

patool  supports  7z  (.7z),  ACE  (.ace),  ADF  (.adf), ALZIP (.alz), APE (.ape), AR (.a), ARC
       (.arc), ARJ (.arj), BZIP2 (.bz2), CAB (.cab), COMPRESS (.Z),  CPIO  (.cpio),  DEB  (.deb),  DMS
       (.dms),  FLAC (.flac), GZIP (.gz), ISO (.iso), LRZIP (.lrz), LZH (.lha, .lzh), LZIP (.lz), LZMA
       (.lzma), LZOP (.lzo), RPM (.rpm), RAR (.rar), RZIP (.rz), SHN (.shn), TAR (.tar), XZ (.xz), ZIP
       (.zip,  .jar), ZOO (.zoo) and ZPAQ (.zpaq) formats.  It relies on helper applications to handle
       those archive formats (for example bzip2 for BZIP2 archives).

       The archive formats TAR, ZIP, BZIP2 and GZIP are supported natively and do not  require  helper
       applications to be installed.

Dokładnie tylko archiwizerów i kompresorów jest w stanie zastąpić nam patool. Może nie tyle zastąpić, co skrócić czas poszukiwania parametrów potrzebnych do przeprowadzenia wymienionych wcześniej zadań dla każdego ze wspomnianych formatów. Oczywiście do obsługi wspomnianych wymagane są odpowiednie programy – a ich lista dostępna jest po formats.

Mając patool w systemie wszystko staje się prostsze.

Tworzenie archiwum:

# $ patool create obrazki.tar.xz obrazki/
patool: Creating obrazki.tar.xz ...
patool: running /bin/tar --create --use-compress-program xz --file obrazki.tar.xz -- obrazki/
patool: ... obrazki.tar.xz created.

Przepakowanie zawartości do innego formatu:

# $ patool repack obrazki.tar.xz obrazki.tar.7z
patool: Repacking obrazki.tar.xz to obrazki.tar.7z ...
patool: running /bin/tar --extract --use-compress-program xz --file obrazki.tar.xz --directory /tmp/Unpack_toStSm
patool: ... obrazki.tar.xz extracted to `/tmp/Unpack_toStSm'.
patool: running /usr/bin/7z a -t7z -mx=9 -- /home/test/obrazki.tar.7z obrazki
patool: ... repacking successful.

Optymalizacja kompresji:

# $ patool recompress obrazki.tar.xz
patool: Recompressing obrazki.tar.xz ...
patool: running '/usr/bin/xz' -c -d -- 'obrazki.tar.xz' > '/tmp/Unpack_tZ63AZ/obrazki.tar'
patool:     with shell='True'
patool: ... obrazki.tar.xz extracted to `/tmp/Unpack_tZ63AZ'.
patool: running '/usr/bin/xz' -c -9 -- 'obrazki.tar' > '/tmp/Unpack_UAGTz5/obrazki.xz'
patool:     with shell='True'
patool: ... recompressed file is now 580B smaller.

I tak dalej. Wszystko czego potrzebujemy to pięć/sześć podstawowych komend oraz nazwa archiwum lub plików do zarchiwizowania (katalogu). Współpraca z dziesiątką przeróżnych narzędzi nigdy nie była taka przyjemna.