]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - shell/zsh/functions/extract
Move to shell/ in preparation for merge into new dotfiles repository
[config/dotfiles.git] / shell / zsh / functions / extract
diff --git a/shell/zsh/functions/extract b/shell/zsh/functions/extract
new file mode 100644 (file)
index 0000000..5a73454
--- /dev/null
@@ -0,0 +1,41 @@
+# Author: Copyright © 2005 Eric P. Mangold - teratorn (-at-) gmail (-dot) com
+# License: MIT. http://www.opensource.org/licenses/mit-license.html
+# http://zshwiki.org/home/examples/functions
+
+local old_dirs current_dirs lower
+lower=${(L)1}
+old_dirs=( *(N/) )
+if [[ $lower == *.tar.gz || $lower == *.tgz ]]; then
+    tar zxfv $1
+elif [[ $lower == *.gz ]]; then
+    gunzip $1
+elif [[ $lower == *.tar.bz2 || $lower == *.tbz ]]; then
+    bunzip2 -c $1 | tar xfv -
+elif [[ $lower == *.bz2 ]]; then
+    bunzip2 $1
+elif [[ $lower == *.zip ]]; then
+    unzip $1
+elif [[ $lower == *.rar ]]; then
+    unrar e $1
+elif [[ $lower == *.tar ]]; then
+    tar xfv $1
+elif [[ $lower == *.lha ]]; then
+    lha e $1
+else
+    print "Unknown archive type: $1"
+    return 1
+fi
+# Change in to the newly created directory, and
+# list the directory contents, if there is one.
+current_dirs=( *(N/) )
+for i in {1..${#current_dirs}}; do
+    if [[ $current_dirs[$i] != $old_dirs[$i] ]]; then
+        cd $current_dirs[$i]
+        ls
+        break
+    fi
+done
+
+#compdef '_files -g "*.gz *.tgz *.bz2 *.tbz *.zip *.rar *.tar *.lha"' extract_archive
+
+# vim: ft=zsh