Blame view

plugins/extract/extract.plugin.zsh 2.28 KB
093a6c34b   mj   Squashed 'repos/r...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  # ------------------------------------------------------------------------------
  #          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
238d8e65a   mj   Squashed 'repos/r...
26
      remove_archive=0
093a6c34b   mj   Squashed 'repos/r...
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
      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" ;;
61aaa7b58   mj   Squashed 'repos/r...
55
        (*.zip|*.war|*.jar|*.sublime-package|*.ipsw|*.xpi|*.apk) unzip "$1" -d $extract_dir ;;
093a6c34b   mj   Squashed 'repos/r...
56
57
58
59
60
61
62
63
64
65
66
        (*.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 ..
        ;;
238d8e65a   mj   Squashed 'repos/r...
67
        (*)
093a6c34b   mj   Squashed 'repos/r...
68
          echo "extract: '$1' cannot be extracted" 1>&2
238d8e65a   mj   Squashed 'repos/r...
69
70
          success=1
        ;;
093a6c34b   mj   Squashed 'repos/r...
71
72
73
74
75
76
77
78
79
      esac
  
      (( success = $success > 0 ? $success : $? ))
      (( $success == 0 )) && (( $remove_archive == 0 )) && rm "$1"
      shift
    done
  }
  
  alias x=extract