55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
# Extracts the contents of archives.
 | 
						|
#
 | 
						|
# Adapted from a script by Sorin Ionescu <sorin.ionescu@gmail.com>
 | 
						|
 | 
						|
success=
 | 
						|
file_name=
 | 
						|
extract_dir=
 | 
						|
while (( $# > 0 )); do
 | 
						|
    if [[ ! -s $1 ]]; then
 | 
						|
        print "$0: file not valid: $1" >&2
 | 
						|
        shift
 | 
						|
        continue
 | 
						|
    fi
 | 
						|
 | 
						|
    success=0
 | 
						|
    file_name="${1:t}"
 | 
						|
    extract_dir="${file_name:r}"
 | 
						|
    case ${1:l} in
 | 
						|
        *.tar.gz|*.tgz) tar xvzf "$1" ;;
 | 
						|
        *.tar.bz2|*.tbz|*.tbz2) tar xvjf "$1" ;;
 | 
						|
        *.tar.xz|*.txz) tar --xz --help &> /dev/null \
 | 
						|
            && tar --xz -xvf "$1" \
 | 
						|
            || xzcat "$1" | tar xvf - ;;
 | 
						|
        *.tar.zma|*.tlz) tar --lzma --help &> /dev/null \
 | 
						|
            && tar --lzma -xvf "$1" \
 | 
						|
            || lzcat "$1" | tar xvf - ;;
 | 
						|
        *.tar) tar xvf "$1" ;;
 | 
						|
        *.gz) gunzip "$1" ;;
 | 
						|
        *.bz2) bunzip2 "$1" ;;
 | 
						|
        *.xz) unxz "$1" ;;
 | 
						|
        *.lzma) unlzma "$1" ;;
 | 
						|
        *.Z) uncompress "$1" ;;
 | 
						|
        *.zip) unzip "$1" -d $extract_dir ;;
 | 
						|
        *.rar) unrar &> /dev/null \
 | 
						|
            && unrar x -ad "$1" \
 | 
						|
            || rar x -ad "$1" ;;
 | 
						|
        *.7z) 7za x "$1" ;;
 | 
						|
        *.deb)
 | 
						|
            mkdir -p "$extract_dir/control"
 | 
						|
            mkdir -p "$extract_dir/data"
 | 
						|
            cd "$extract_dir"; ar vx "../${1}" > /dev/null
 | 
						|
            cd control; tar xzvf ../control.tar.gz
 | 
						|
            cd ../data; tar xzvf ../data.tar.gz
 | 
						|
            cd ..; rm *.tar.gz debian-binary
 | 
						|
            cd ..
 | 
						|
            ;;
 | 
						|
        *)  print "$0: cannot extract: $1" >&2
 | 
						|
            success=1
 | 
						|
            ;;
 | 
						|
    esac
 | 
						|
    shift
 | 
						|
done
 |