4 ms·
Show HN: Extract it – Because nobody can remember tar commands
- anthonyu 11y agoI can remember tar commands.
- crimsonalucard 11y agoThis makes total sense as a web service. In all seriousness... why? This would be an awesome unix tool.
- gue5t 11y agoOne such unix tool is "dtrx", which has been around for ages. http://freecode.com/projects/dtrx http://freecode.com/projects/dtrx
- oofabz 11y agoI 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>".
- madprops 11y agoWhy 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 11y agobsdtar 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.
- kw71 11y ago7zip does most of them, but doesn't depend on the original tools.
- adrusi 11y agoIt's called tar. Seriously. I'm positive gnu tar will pick the compression engine based on the file contents, I think bsd does too. It's not a documented standard, but if all implementations support it, it may as well be.
- tetron 11y agoSomeone has, it is called dtrx ("do the right thing extractor"): http://brettcsmith.org/2007/dtrx/ http://brettcsmith.org/2007/dtrx/
- tetraodonpuffer 11y agowhat 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
- mpnordland 11y agoEvery 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.
- Splognosticus 11y agoFor 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#auto_002dcompress http://www.gnu.org/software/tar/manual/html_node/gzip.html#a...
- spartas 11y agoRecent versions of BSD tar will also detect the compression algorithm for extracting. No such luck with the -a, --auto-compress option though.
- craftkiller 11y agoBsdtar 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/bsdtar.c https://github.com/libarchive/libarchive/blob/master/tar/bsd...
- jamiesonbecker 11y agoOr, 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 11y agoDon't you need the z flag as well since filename is gzipped?
- jamiesonbecker 11y agoNot anymore! GNU tar now figures it out automagically :)
- oofabz 11y agoBSD tar also has this functionality. "tar -xf <filename>" works for archives compressed with gzip, bzip2, or xz.
- carlosf8 11y agoI 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 11y agoI'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`.
- robalfonso 11y agoMaybe 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!
- guessmyname 11y agoI 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
- nickgartmann 11y agoI 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.
- retrogradeorbit 11y agoIn all seriousness, who would actually use this?
- kazinator 11y agoIt'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
- jfb 11y agoI'm not using this until it handles SGI bru. Remember bru? No? Consider yourself lucky.
- gfodor 11y agoWhy 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.
- deleted 11y ago[deleted]
- adrusi 11y agoThe f isn't for force. It's for "file" and it takes the filename as a parameter — that's why you usually see it at the end of the character sequence, a filename has to immediately follow it. If you don't specify -f tar will read from stdin for extraction or write to stdout for creation.
- deleted 11y ago[deleted]
- SeldomSoup 11y agoSeems like a redundant flag. Many utilities are perfectly fine reading from stdin if no [file] is specified, without any kind of -f flag.
- adrusi 11y agoIt's redundant for extraction. For creation (-c) where you can list many files, it's just a choice some unix developer made to allow the destination file to be specified independent of order. I think there'd be some awkward edge cases otherwise. Anyway, adding verbosity to discourage operating on static files and prefering being on a pipeline could be considered a feature.
- Hello71 11y agono, "v" means verbose since at least 2.8 BSD: https://www.freebsd.org/cgi/man.cgi?query=tar&manpath=2.8+BSD https://www.freebsd.org/cgi/man.cgi?query=tar&manpath=2.8+BS...
- quantumtremor 11y agoJust 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 11y agoall the $1 here should be quoted as "$1", just in case if it gets a file with space in the name.
- indiv0 11y agoSimilarly: https://github.com/dcat/dotfiles/blob/master/.sh.d/functions/5-extract https://github.com/dcat/dotfiles/blob/master/.sh.d/functions...
- snorrah 11y agoIf you have 7z, do you need most of the others? 7z seems like it might process all of the others listed here.
- mydpy 11y agoWait, is this seriously a problem for people, or an xkcd joke?
- keithgabryelski 11y agoYou 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.
- mahouse 11y agoDoes 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
- redwards510 11y agoThat's the first thing I tried too. I thought the site was broken because there's no button to push and after hitting enter nothing happened. It's ok if you don't support everything yet, but at least have a message saying "Not yet implemented" or something, please.
- deleted 11y ago[deleted]
- scintill76 11y agovar 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 11y agoIt'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.
- txutxu 11y agoDoes 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 11y ago>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
- ben0x539 11y agoGee, 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!