X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=ex;h=cf04ee6f2f26e93d3ac5ec30b5030a39e7b55611;hb=f0fb727480e27b66697b300d4046e8148b5623aa;hp=5ca021ec64c3eb9fb3494d7ef9b2015a03e2eeaf;hpb=4ef4153814624c3eb0cade2e539800747d19ecd4;p=small-misc-bash diff --git a/ex b/ex index 5ca021e..cf04ee6 100755 --- a/ex +++ b/ex @@ -15,45 +15,63 @@ ex() { local help="Usage: ex [--help] FILE... -Extract each FILE according to its extension. -7z bz2 deb gz iso rar rpm tar xz zip & variations. -See source for exact file extensions." +Extract many types of files + +Based on their extensions, +7z [tar.]bz2 deb [tar.]gz iso dsc rar rpm sfs tar xpi [tar.]xz zip Z. +See source for exact file extensions. +Note: dtrx (package & command) extracts most of these plus some others." + if [[ $1 == --help ]]; then echo "$help" fi local x super for x in "$@"; do - case "$x" in - *.tar.bz2 | *.tbz2 ) tar xvjf "$x" ;; - *.tar.gz | *.tgz ) tar xvzf "$x" ;; - *.bz2 ) bunzip2 "$x" ;; - *.gz ) gunzip "$x" ;; - *.tar ) tar xvf "$x" ;; - *.zip ) unzip "$x" ;; - *.Z ) uncompress "$x" ;; - *.7z ) 7za x "$x" ;; - *.deb ) ar xv "$x" ;; - *.rpm ) rpm2cpio "$x" | cpio --extract --make-directories --verbose ;; - *.tar.xz ) tar Jxvf "$x" ;; + case "$x" in + # tars first, so they are higher pri than non-tar extensions + *.tar ) tar xf "$x" ;; + *.tar.bz2 | *.tbz2 ) tar xjf "$x" ;; + *.tar.gz | *.tgz ) tar xzf "$x" ;; + *.tar.xz ) tar Jxf "$x" ;; + *.xz) xz -d "$x" ;; + *.7z ) 7za x "$x" ;; + *.bz2 ) bunzip2 "$x" ;; + *.deb ) + ar x "$x" + tmp=(data.tar.*) + case $tmp in + *.xz) tar xJf data.tar.xz ;; + *.gz) tar xzf data.tar.gz ;; + *) echo "error: could not find data.tar.*" >&2; exit 1 ;; + esac + tar xzf control.tar.gz + rm -f control.tar.gz + rm -f data.tar.* + ;; + *.dsc) dpkg-source -x "$x" ;; + *.gz ) gunzip "$x" ;; *.iso ) + local super if [[ $EUID != 0 ]]; then - if [[ $(sudo -v) == Sorry* ]]; then - echo error: need superuser priveledge for iso file - return 1 - fi super=sudo fi local temp_dir=$(mktemp -d) - losetup -f + $super losetup -f $super mount -o loop "$x" "$temp_dir" local dir="${x%%.iso}" mkdir "$dir" - cp -av "$temp_dir"/* "$dir" + cp -a "$temp_dir"/* "$dir" $super umount "$temp_dir" ;; + *.jar) jar xf "$x" ;; *.r[0-9][0-9]|*.rar ) unrar x "$x" ;; - *) echo "I don't kno how to extract $x";; - esac + *.rpm ) rpm2cpio "$x" | cpio --extract --make-directories ;; + *.sfs) $super unsquashfs "$x" ;; + *.Z ) uncompress "$x" ;; + *.zip|*.xpi ) unzip "$x" ;; + + *) echo "I don't know how to extract $x";; + esac done } ex "$@"