4 ms·
I remember 90% of the time which flag I want to use, but the other 10% sends me into a rage! =) I gave up and added this to my .bashrc: function extract(
by UI_at_80x24 6y ago
I remember 90% of the time which flag I want to use, but the other 10% sends me into a rage! =)
I gave up and added this to my .bashrc:
function extract()
{
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*.zst) zstd -d $1 ;;
*.xz) unxz $1 ;;
*) echo "'$1' cannot be extracted via >extract<" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
- thequux 6y agoRecent (as in, within the last ~3-5 years) versions of GNU tar automatically detect the type of compression and apply the appropriate tool, so you can often get away with `tar xvf`.
- ahartmetz 6y agoActually close to 12 years, GNU tar 1.21 https://www.gnu.org/software/tar/ https://www.gnu.org/software/tar/ Another "recent" (much more recent IIRC) change is that you don't need the dot anymore in find to search in the current directory.
- Hello71 6y agoaccording to https://git.savannah.gnu.org/cgit/findutils.git/commit/find/find.1?id=c030b5ee33bbec3c93cddc3ca9ebec14c24dbe07 https://git.savannah.gnu.org/cgit/findutils.git/commit/find/..., this functionality has been present since findutils was moved under source control in 1996.
- jfrunyon 6y agoI believe that GNU find used to (in some cases?) show a warning if the directory was omitted. Could be wrong.
- mehrdadn 6y agoI think the dot actually gives you issues on Mac? Or something like that. I remember encountering issues with it.
- rbonvall 6y agoThere's a utility called dtrx ("do the right extraction") that does basically this, and also makes sure that files are always extracted into a directory.
- Hello71 6y agoextract() { bsdtar -xf "$1" } you can decompress things which are not files, such as stdin or device files. in addition, your code does not cover *.tar.xz (more common than tar.bz2 nowadays), or lzma, or lz4, or tar.zst, or many many other formats. further, it's not even consistent: bunzip2, gunzip, and unxz remove the input file, but tar, unrar, 7z, and zstd do not.
- eMSF 6y agoI guess you only ever extract punctually named files. But it's still rather amusing that with the exception of 'case', the only places where $1 is properly quoted are the ones where it's not really necessary, and vice versa (but then again, it's not done for the parameter, but rather the single quotes). Anyway, my advice to you and anyone else having trouble with tar is that "tar caf" and "tar xaf" are the only things most people need to remember about tar, with or without compression. (In this case, most people means people who use tar, but so rarely that they have trouble remembering how to use it; they probably never use it for anything else other than (un)archiving. Also, xkcd isn't gospel.)
- maple3142 6y agoYou can use atool (https://www.nongnu.org/atool/ https://www.nongnu.org/atool/) too. It is just some perl scripts wrapper around some commom extraction tools.
- nobody9999 6y agoI can certainly understand the impulse to something like this, but as other posters pointed out, your case statement is incomplete, and will continue to become more so as new tools become available. Personally, I consciously avoid using the internal decompression features of tar, both out of habit and to avoid unexpected results. As such, I generally use command lines like: bunzip2 -c <tar.bz2 file> |tar xvf - instead of relying on tar xvjf I don't see it as wrong or bad to use tar's decompression features, it's more about my own preferences and experience. Being able to perform similar actions in multiple ways is one of the things I've always appreciated about the shell and the Unix/GNU userland.