Hacker News new | past | comments | ask | show | jobs | submit login

> that nobody can ever remember

These have gone a long way for me:

  tar xzf <in>       eXtract Zipped File
  tar czf <out> <in> Create Zipped File
Anything more complicated and I have to google.



The `-z` on extract is not needed on basically most modern tar implementations (OpenBSD's is I believe the one outlier). tar -xf foo.tar.gz (or .xz, .bz2, .zst, etc.) will work, auto detect the archive type and extract.


OpenBSD, which is a fork of NetBSD, is not the only "outlier".^1

For many years, NetBSD tar has autodetected bzip2 compression.

   tar xzf 1.tar.bz2 
will work on gzip as well as bzip2. Whereas GNU tar still requires "j" instead^2

   tar xjf 1.tar.bz2
1. For example, FreeBSD or MacOS tar is BSD tar. It will autodetect bzip2 compression.

2. The GNU tar included with VoidLinux still requires z or j.

The pax(1) utility is the POSIX solution to these incompatibilities.


Void Linux appears to include GNU tar 1.34

The following should work, it worked on my Arch Linux install (but note that auto detection is not a "new" feature to GNU tar, I've been using it for at least 5 years)

    echo "Hello" > foo.txt
    tar cjf foo.tar.bz2 foo.txt
    rm foo.txt
    tar xf foo.tar.bz2
    cat foo.txt
and produce "Hello"

To be clear, I'm not saying the following should work

    tar xzf foo.tar.bz2
What should work is:

    tar xf foo.tar.bz2

And for proof this is GNU tar

    $ tar --version
    tar (GNU tar) 1.34
    Copyright (C) 2021 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.

    Written by John Gilmore and Jay Fenlason.


If I have a script I want to work on both BSD and Linux, and I do want to rely on uname, I usually do something like

   bzip2 -dc 1.tar.bz2|tar xf -


Oh this is great, I remember z for gzip but always have to look up J vs j for bzip2/xz


With https://github.com/c-blake/nio/blob/main/utils/catz.nim you can get similar format agnostic decoding/decompression not just in tar but in any pipeline context based on magic numbers, not filename extensions and even doing the copy loop needed for unseekable inputs to replace the early read -- e.g. cat foo.gz|catz|less works..


No need for the mnemonic device when you can literally type “--extract --gzip --file”, which reads as a sentence and has no trouble adapting to --xz or --zstd.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: