mirror of
				https://github.com/ohmyzsh/ohmyzsh.git
				synced 2025-11-04 13:21:19 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
# ------------------------------------------------------------------------------
 | 
						|
#          FILE:  extract.plugin.zsh
 | 
						|
#   DESCRIPTION:  oh-my-zsh plugin file.
 | 
						|
#        AUTHOR:  Sorin Ionescu (sorin.ionescu@gmail.com)
 | 
						|
#       VERSION:  1.0.1
 | 
						|
# ------------------------------------------------------------------------------
 | 
						|
 | 
						|
 | 
						|
function extract() {
 | 
						|
  local remove_archive
 | 
						|
  local success
 | 
						|
  local file_name
 | 
						|
  local extract_dir
 | 
						|
 | 
						|
  if (( $# == 0 )); then
 | 
						|
    echo "Usage: extract [-option] [file ...]"
 | 
						|
    echo
 | 
						|
    echo Options:
 | 
						|
    echo "    -r, --remove    Remove archive."
 | 
						|
    echo
 | 
						|
    echo "Report bugs to <sorin.ionescu@gmail.com>."
 | 
						|
  fi
 | 
						|
 | 
						|
  remove_archive=1
 | 
						|
  if [[ "$1" == "-r" ]] || [[ "$1" == "--remove" ]]; then
 | 
						|
    remove_archive=0 
 | 
						|
    shift
 | 
						|
  fi
 | 
						|
 | 
						|
  while (( $# > 0 )); do
 | 
						|
    if [[ ! -f "$1" ]]; then
 | 
						|
      echo "extract: '$1' is not a valid file" 1>&2
 | 
						|
      shift
 | 
						|
      continue
 | 
						|
    fi
 | 
						|
 | 
						|
    success=0
 | 
						|
    file_name="$( basename "$1" )"
 | 
						|
    extract_dir="$( echo "$file_name" | sed "s/\.${1##*.}//g" )"
 | 
						|
    case "$1" in
 | 
						|
      (*.tar.gz|*.tgz) [ -z $commands[pigz] ] && tar zxvf "$1" || pigz -dc "$1" | tar xv ;;
 | 
						|
      (*.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) [ -z $commands[pigz] ] && gunzip "$1" || pigz -d "$1" ;;
 | 
						|
      (*.bz2) bunzip2 "$1" ;;
 | 
						|
      (*.xz) unxz "$1" ;;
 | 
						|
      (*.lzma) unlzma "$1" ;;
 | 
						|
      (*.Z) uncompress "$1" ;;
 | 
						|
      (*.zip|*.war|*.jar|*.sublime-package) unzip "$1" -d $extract_dir ;;
 | 
						|
      (*.rar) unrar 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 ..
 | 
						|
      ;;
 | 
						|
      (*) 
 | 
						|
        echo "extract: '$1' cannot be extracted" 1>&2
 | 
						|
        success=1 
 | 
						|
      ;; 
 | 
						|
    esac
 | 
						|
 | 
						|
    (( success = $success > 0 ? $success : $? ))
 | 
						|
    (( $success == 0 )) && (( $remove_archive == 0 )) && rm "$1"
 | 
						|
    shift
 | 
						|
  done
 | 
						|
}
 | 
						|
 | 
						|
alias x=extract
 | 
						|
 |