#!/bin/bash # Copyright (C) 2014 Ian Kelling # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ex() { local help="Usage: ex [--help] FILE... Extract many types of files Based on their extensions, 7z bz2 deb gz iso dsc rar rpm tar xz zip sfs & some combinations. See source for exact file extensions. Note: apt-get install dtrx will do the same for most of these types, plus some more, I'm going to try it out sometime." if [[ $1 == --help ]]; then echo "$help" fi local x super for x in "$@"; do case "$x" in *.tar.bz2 | *.tbz2 ) tar xjf "$x" ;; *.tar.gz | *.tgz ) tar xzf "$x" ;; *.bz2 ) bunzip2 "$x" ;; *.gz ) gunzip "$x" ;; *.tar ) tar xf "$x" ;; *.zip ) unzip "$x" ;; *.Z ) uncompress "$x" ;; *.7z ) 7za x "$x" ;; *.deb ) ar x "$x" ;; *.rpm ) rpm2cpio "$x" | cpio --extract --make-directories ;; *.tar.xz ) tar Jxf "$x" ;; *.xz) xz -d "$x" ;; *.iso ) local super if [[ $EUID != 0 ]]; then super=sudo fi local temp_dir=$(mktemp -d) $super losetup -f $super mount -o loop "$x" "$temp_dir" local dir="${x%%.iso}" mkdir "$dir" cp -a "$temp_dir"/* "$dir" $super umount "$temp_dir" ;; *.r[0-9][0-9]|*.rar ) unrar x "$x" ;; *.dsc) dpkg-source -x "$x" ;; *.sfs) $super unsquashfs "$x" ;; *) echo "I don't know how to extract $x";; esac done } ex "$@"