diff --git a/plugins/available/extract.plugin.bash b/plugins/available/extract.plugin.bash index bb520451..3389f2e0 100644 --- a/plugins/available/extract.plugin.bash +++ b/plugins/available/extract.plugin.bash @@ -6,20 +6,35 @@ extract () { echo "Error: No file specified." return 1 fi - if [ -f $1 ] ; then - case $1 in - *.tar.bz2) tar xvjf $1 ;; - *.tar.gz) tar xvzf $1 ;; - *.bz2) bunzip2 $1 ;; - *.rar) unrar x $1 ;; - *.gz) gunzip $1 ;; - *.tar) tar xvf $1 ;; - *.tbz2) tar xvjf $1 ;; - *.tgz) tar xvzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "'$1' cannot be extracted via extract" ;; + if [ -f "$1" ] ; then + case "$1" in + *.tar.bz2) tar xvjf "$1" ;; + *.tar.gz) tar xvzf "$1" ;; + *.tar.xz|*.txz) + xz -dc "$1" | tar xvf - ;; + *.tar.lzma) ( xz -dc "$1" || lzma -dc "$1" ) | tar xvf - ;; + *.tar.lzop) lzop -d -c "$1" | tar xvf - ;; + *.tar.lzip) lzip -d -c "$1" | tar xvf - ;; + *.cpio.gz|*.cpio.Z) + gzip -dc "$1" | cpio -itvm ;; + *.cpio.bz2) bzip2 -dc "$1" | cpio -itvm ;; + *.cpio.xz) xz -dc "$1" | cpio -itvm ;; + *.cpio) cpio -itvm < "$1" ;; + *.bz2) bunzip2 "$1" ;; + *.rar) unrar x "$1" ;; + *.gz) gunzip "$1" ;; + *.tar) tar xvf "$1" ;; + *.tbz2) tar xvjf "$1" ;; + *.tgz) tar xvzf "$1" ;; + *.zip) unzip "$1" ;; + *.jar) unzip "$1" ;; + *.Z) (uncompress "$1" || gzip -dc "$1") ;; + *.7z) 7z x "$1" ;; + *.lzma) (xz -dc "$1" || lzma -d "$1") ;; + *.lzop) lzop -d "$1" ;; + *.lzip) lzip -d "$1" ;; + *.xz) xz -d "$1" ;; + *) echo "'$1' cannot be extracted via extract" ;; esac else echo "'$1' is not a valid file"