
Show HN: Extract it – Because nobody can remember tar commands - mawalu
http://extractit.mawalabs.de/
======
kazinator
It's a nice web gadget. However, I just go by this handy table, which is on a
yellow stickie on my monitor:

    
    
      NAME             MODERN GNU TAR COMMAND
      file.tar.gz      tar xf file.tar.gz
      file.tar.bz      tar xf file.tar.bz
      file.tar.bz2     tar xf file.tar.bz2
      file.tar         tar xf file.tar
      file.tgz         tar xf file.tgz (missing from web gadget!)
      file.abcdef      tar xv file.abcdf (*)
      ---
      * If file.abcdf is actually any of the preceding formats;
        i.e. GNU Tar doesn't just go by the suffix!
    

Nobody memorizes these, and I wouldn't want to turn into a nobody, right?

By the way, if you actually do need a command which performs a pattern match
on a file name and dispatches some other command, why would you go through a
web browser? You'd want this in your shell as a function:

    
    
      $ dtrt x.blorch.zonk.bloop # "do the right thing"
    

Hello, we have "case"

    
    
      case "$file" in
      -* | --* ) echo "oops, $file looks like an option!" ;;
      *.zip ) unzip "$file" ;;
      *.rar ) ... ;;
      *.tar.* | *.tgz | *.tar ) tar xf "$file" ;;
      ...
      esac

------
quantumtremor
Just add this to your .bashrc/.zshrc.

    
    
      extract ()
      {
        if [ -f $1 ] ; then
            case $1 in
                *.tar.bz2) tar xjf $1 ;;
                *.tar.gz) tar xzf $1 ;;
                *.bz2) bunzip2 $1 ;;
                *.rar) unrar x $1 ;;
                *.gz) gunzip $1 ;;
                *.tar) tar xf $1 ;;
                *.tbz2) tar xjf $1 ;;
                *.tgz) tar xzf $1 ;;
                *.zip) unzip $1 ;;
                *.Z) uncompress $1;;
                *.7z) 7z x $1 ;;
                *) echo "'$1' cannot be extracted via ex()" ;;
           esac
        else
            echo "'$1' is not a valid file"
        fi  
      }

~~~
ryenus
all the $1 here should be quoted as "$1", just in case if it gets a file with
space in the name.

------
gfodor
Why not just learn what the flags mean? If you're cargo culting it, and not
learning the point of the "xfvz" (it means eXtract, from the specified File,
with a Visual dump of the extraction, from a gZipped archived tarball) --
you'll never remember it.

~~~
reedlaw
"tar xvzf" is already a part of my muscle memory. Occasionally I need to
change the "z" to a "j" for bzip2 archives. And the "x" becomes a "c" if I'm
Creating an archive rather than eXtracting.

Also this site doesn't show the command for files with ".tgz" extensions.

~~~
JoshTriplett
> tar xvzf" is already a part of my muscle memory. Occasionally I need to
> change the "z" to a "j" for bzip2 archives

With modern tar, just don't include the z at all. "tar -xf" knows how to
extract various kinds of compressed tar files automatically.

~~~
monksy
Today I learned. I've been doing zxvf for quite a while and I always got
annoyed with bz2 files.

------
Splognosticus
For GNU tar at least it's not necessary to specify the compression program
when extracting--it will auto-detect it. Additionally when creating tar files
it has -a, --auto-compress to use the file extension to determine the
compression program to use.

[http://www.gnu.org/software/tar/manual/html_node/gzip.html#a...](http://www.gnu.org/software/tar/manual/html_node/gzip.html#auto_002dcompress)

~~~
spartas
Recent versions of BSD tar will also detect the compression algorithm for
extracting. No such luck with the -a, --auto-compress option though.

~~~
craftkiller
Bsdtar definitely supports -a. I'm on a phone so I can't help too much but its
the first option after you Ctrl+f for getopt on
[https://github.com/libarchive/libarchive/blob/master/tar/bsd...](https://github.com/libarchive/libarchive/blob/master/tar/bsdtar.c)

------
guessmyname
I have good memory but I always try to convert information into mental cards
so I can draw associations, that is how I have learned all commands you can
imagine. I deactivated the system file manager of my operation system long
time ago because I got used to the terminal, and that is how I do everything
in my personal computer.

For extraction of archives I am able to remember the commands like this. For
files with "tar" extension I use "tar xf" (where "x" means eXtract and "f"
file, I think so). Now, if the extension is "tar.bz2" add a "j", and "z" for
"tar.gz". For "zip" files use "unzip" and start adding a prefix like "b" or
"g" for "bz2" and "gz" files respectively:

    
    
      file.tar     -> tar xf
      file.tar.gz  -> tar xfz
      file.tar.bz2 -> tar xfj
      file.zip     ->  unzip
      file.bz2     -> bunzip2
      file.gz      -> gunzip
    

[https://github.com/xvoland/Extract](https://github.com/xvoland/Extract)

------
mahouse
Does not recognise .xz? It's the first thing I tried, ffs.

It looks like it does not recognise other usual things such as .gz alone or
.tgz: [https://github.com/Mawalu/extract-it/blob/gh-
pages/main.js](https://github.com/Mawalu/extract-it/blob/gh-pages/main.js)

~~~
scintill76

        var input = document.querySelector('#leInput'),
        commands = {
          '.tar': 'tar xfv',
          '.zip': 'unzip',
          '.tar.bz2': 'tar jxvf',
          '.tar.gz': 'tar xfvz',
          '.tar.bz': 'tar xjf',
        };
    

I don't think the difference between .bz2 and .bz makes any sense. Am I wrong,
or is it just that bz2 extracts verbosely and bz doesn't? I'd guess these
flags were copied from some random sources without the author realizing they
are nearly equivalent.

I know difficulty with tar is a meme[1], but once you get over that "j" means
bz2, why is it hard to remember V for Verbose, Z for gZip, X for eXtract, F
for File (which you'll almost always be passing)? I ask this both rhetorically
because it shouldn't be hard, but also because I am sometimes oddly hesitant
when forming tar commands. But not enough to reach for a web page.

[1] [https://xkcd.com/1168/](https://xkcd.com/1168/)

~~~
mahouse
It's not hard at all. I personally memorised "zxvf", and change z accordingly,
or remove v if it's a shitload of files and it floods my terminal.

------
jamiesonbecker
Or, add this to your .bashrc (ensure that it's sourced.. some distributions
don't do this automatically):

    
    
         alias untar="tar xvf"
    
    

Then, open a new terminal window, and from then on it's just:

    
    
         untar filename.tar.gz

~~~
archinal
Don't you need the z flag as well since filename is gzipped?

~~~
jamiesonbecker
Not anymore! GNU tar now figures it out automagically :)

~~~
oofabz
BSD tar also has this functionality. "tar -xf <filename>" works for archives
compressed with gzip, bzip2, or xz.

------
txutxu
Does not work if I don't use a dot at the beginning of the extension.

    
    
        .tar -> enter -> works
        tar  -> enter -> nothing happens
    
    

I use an extract() function on my shell initialization files. It deals with
most formats for me.

Anyway nice to see it implemented on a web interface, the source code is
really brief :-)

Right now it supports tar, tar.gz, tar.bz, tar.bz2 and zip. If you want to
deal with more formats, you have plenty of places to look for the 'ext => cmd'
relation:

    
    
         https://github.com/search?q=extract

~~~
madprops
>Does not work if I don't use a dot at the beginning of the extension.

Maybe because you're expected to type the full filename, for example
crash34_master.tar.gz

------
anthonyu
I can remember tar commands.

------
robalfonso
Maybe I just use tar a lot, but I actually can remember all the flags I
typically use and wouldn't use this :) still nice work though.

co workers have sent this to me multiple times

[https://xkcd.com/1168/](https://xkcd.com/1168/)

it helps the characters name is also mine!

------
carlosf8
I use atool ([http://www.nongnu.org/atool/](http://www.nongnu.org/atool/)) You
can just do "aunpack file" or "atool -x file", same goes for packing..

~~~
vortico
I've used this for years, not because I can't remember tar, gunzip, unzip,
unrar, 7z, etc commands (although it takes a second to recall which flags to
use for a particular archive format), but because it prevents
tarbombs/zipbombs from filling my current working directory. It first extracts
the archive to a temporary folder, and if it notices only one file in the
folder, it moves it back one directory. One minor complaint is that "aunpack"
is awkward to type, so I've aliased it to `a`.

------
madprops
Why hasn't anyone made (afaik) an all in one extractor that depends on all the
popular compression tools and uses the appropriate one depending on the
extension. That would be useful.

~~~
cperciva
bsdtar does this, except by looking at the file format rather than looking at
the extension. It supports tar, pax, cpio, zip, xar, lha, ar, cab, mtree, rar,
and ISO images, compressed using gzip, bzip2, lzip, xz, lzma, or compress.

------
ben0x539
Gee, I've been using a handrolled program that a) figures out what other
program to delegate to as well as what options to pass and b) makes sure
unpacking whatever results in exactly one new entry in the current directory,
that is, unpacks into a newly created directory if there's more than one thing
top-level in the archive. Maybe I should have been posting it on the internet!

------
keithgabryelski
You basically need to know three options for tar:

-x EXTRACT -c CREATE -f - USE STDIN/OUT

to create a tar file of the current directory:

tar -cf - . | gzip > /tmp/foo.tar.gz

to extract:

gzip < /tmp/foo.tar.gz | tar -xf -

why tar has all the options was someone's idea they were helping you out --
they weren't

Create is -c --- remember that eXtract is -x - remember that -f - is
stdout/stdin depending on your need -- remember that

pipes are your friend.

------
nickgartmann
I use a little mnemonic phrase... tar dash eXtract Zee Files (tar -xzf)

and

tar dash Compress Zee Files (tar -czf)

Yes, the z does nothing when extracting. But it helps me remember.

------
crimsonalucard
This makes total sense as a web service.

In all seriousness... why? This would be an awesome unix tool.

~~~
gue5t
One such unix tool is "dtrx", which has been around for ages.

[http://freecode.com/projects/dtrx](http://freecode.com/projects/dtrx)

~~~
oofabz
I use p7zip, which has also been around for ages. Whether you have a .tgz,
.txz, .rar, .zip, or whatever, you can extract it with "7z x <filename>".

------
mpnordland
Every time I need to extract some kind of tar file i just do tar -xf
filename.tar.<whatever> and it works fine. This would be nice for compressing,
but seems pointless.

------
mydpy
Wait, is this seriously a problem for people, or an xkcd joke?

------
retrogradeorbit
In all seriousness, who would actually use this?

------
jfb
I'm not using this until it handles SGI bru. Remember bru? No? Consider
yourself lucky.

------
tetraodonpuffer
what other tar commands/options do people use when extracting? lately with tar
it doesn't even seem you need z/J/... to pick the compression format, just tar
xvf archive.tar.whatever and it figures it out itself

