Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Ohmyzsh
Commits
0b809c8d
Unverified
Commit
0b809c8d
authored
Aug 14, 2021
by
Marc Cornellà
Browse files
Merge branch 'refactor/extract-plugin'
Closes #7948 Closes #9959
parents
af6c7f3d
0b32e4b2
Changes
3
Show whitespace changes
Inline
Side-by-side
plugins/extract/README.md
View file @
0b809c8d
...
...
@@ -21,6 +21,8 @@ plugins=(... extract)
|
`apk`
| Android app file |
|
`aar`
| Android library file |
|
`bz2`
| Bzip2 file |
|
`cab`
| Microsoft cabinet archive |
|
`cpio`
| Cpio archive |
|
`deb`
| Debian package |
|
`ear`
| Enterprise Application aRchive |
|
`gz`
| Gzip file |
...
...
plugins/extract/_extract
View file @
0b809c8d
...
...
@@ -3,5 +3,5 @@
_arguments \
'(-r --remove)'{-r,--remove}'[Remove archive.]' \
"*::archive file:_files -g '(#i)*.(7z|Z|apk|aar|bz2|deb|ear|gz|ipa|ipsw|jar|lrz|lz4|lzma|rar|rpm|sublime-package|tar|tar.bz2|tar.gz|tar.lrz|tar.lz|tar.lz4|tar.xz|tar.zma|tar.zst|tbz|tbz2|tgz|tlz|txz|tzst|war|whl|xpi|xz|zip|zst)(-.)'" \
"*::archive file:_files -g '(#i)*.(7z|Z|apk|aar|bz2|
cab|cpio|
deb|ear|gz|ipa|ipsw|jar|lrz|lz4|lzma|rar|rpm|sublime-package|tar|tar.bz2|tar.gz|tar.lrz|tar.lz|tar.lz4|tar.xz|tar.zma|tar.zst|tbz|tbz2|tgz|tlz|txz|tzst|war|whl|xpi|xz|zip|zst)(-.)'" \
&& return 0
plugins/extract/extract.plugin.zsh
View file @
0b809c8d
alias
x
=
extract
extract
()
{
local
remove_archive
local
success
local
extract_dir
setopt localoptions noautopushd
if
((
$#
==
0
))
;
then
cat
<<
-
'
EOF
'
>&2
Usage: extract [-option] [file ...]
cat
>
&2
<<
'
EOF
'
Usage: extract [-option] [file ...]
Options:
Options:
-r, --remove Remove archive after unpacking.
EOF
EOF
fi
remove_archive
=
1
local
remove_archive
=
1
if
[[
"
$1
"
==
"-r"
]]
||
[[
"
$1
"
==
"--remove"
]]
;
then
remove_archive
=
0
shift
fi
local pwd
=
"
$PWD
"
while
((
$#
>
0
))
;
do
if
[[
!
-f
"
$1
"
]]
;
then
echo
"extract: '
$1
' is not a valid file"
>
&2
...
...
@@ -27,56 +26,60 @@ extract() {
continue
fi
success
=
0
extract_dir
=
"
${
1
:t:r
}
"
case
"
${
1
:l
}
"
in
(
*
.tar.gz|
*
.tgz
)
((
$+
commands[pigz]
))
&&
{
pigz
-dc
"
$1
"
|
tar
xv
}
||
tar
zxvf
"
$1
"
;;
(
*
.tar.bz2|
*
.tbz|
*
.tbz2
)
tar
xvjf
"
$1
"
;;
local
success
=
0
local
extract_dir
=
"
${
1
:t:r
}
"
local
file
=
"
$1
"
full_path
=
"
${
1
:A
}
"
case
"
${
file
:l
}
"
in
(
*
.tar.gz|
*
.tgz
)
((
$+
commands[pigz]
))
&&
{
pigz
-dc
"
$file
"
|
tar
xv
}
||
tar
zxvf
"
$file
"
;;
(
*
.tar.bz2|
*
.tbz|
*
.tbz2
)
tar
xvjf
"
$file
"
;;
(
*
.tar.xz|
*
.txz
)
tar
--xz
--help
&> /dev/null
\
&&
tar
--xz
-xvf
"
$
1
"
\
||
xzcat
"
$
1
"
|
tar
xvf -
;;
&&
tar
--xz
-xvf
"
$
file
"
\
||
xzcat
"
$
file
"
|
tar
xvf -
;;
(
*
.tar.zma|
*
.tlz
)
tar
--lzma
--help
&> /dev/null
\
&&
tar
--lzma
-xvf
"
$
1
"
\
||
lzcat
"
$
1
"
|
tar
xvf -
;;
&&
tar
--lzma
-xvf
"
$
file
"
\
||
lzcat
"
$
file
"
|
tar
xvf -
;;
(
*
.tar.zst|
*
.tzst
)
tar
--zstd
--help
&> /dev/null
\
&&
tar
--zstd
-xvf
"
$1
"
\
||
zstdcat
"
$1
"
|
tar
xvf -
;;
(
*
.tar
)
tar
xvf
"
$1
"
;;
(
*
.tar.lz
)
((
$+
commands[lzip]
))
&&
tar
xvf
"
$1
"
;;
(
*
.tar.lz4
)
lz4
-c
-d
"
$1
"
|
tar
xvf -
;;
(
*
.tar.lrz
)
((
$+
commands[lrzuntar]
))
&&
lrzuntar
"
$1
"
;;
(
*
.gz
)
((
$+
commands[pigz]
))
&&
pigz
-dk
"
$1
"
||
gunzip
-k
"
$1
"
;;
(
*
.bz2
)
bunzip2
"
$1
"
;;
(
*
.xz
)
unxz
"
$1
"
;;
(
*
.lrz
)
((
$+
commands[lrunzip]
))
&&
lrunzip
"
$1
"
;;
(
*
.lz4
)
lz4
-d
"
$1
"
;;
(
*
.lzma
)
unlzma
"
$1
"
;;
(
*
.z
)
uncompress
"
$1
"
;;
(
*
.zip|
*
.war|
*
.jar|
*
.ear|
*
.sublime-package|
*
.ipa|
*
.ipsw|
*
.xpi|
*
.apk|
*
.aar|
*
.whl
)
unzip
"
$1
"
-d
$extract_dir
;;
(
*
.rar
)
unrar x
-ad
"
$1
"
;;
(
*
.rpm
)
mkdir
"
$extract_dir
"
&&
cd
"
$extract_dir
"
&&
rpm2cpio
"../
$1
"
| cpio
--quiet
-id
&&
cd
..
;;
(
*
.7z
)
7za x
"
$1
"
;;
&&
tar
--zstd
-xvf
"
$file
"
\
||
zstdcat
"
$file
"
|
tar
xvf -
;;
(
*
.tar
)
tar
xvf
"
$file
"
;;
(
*
.tar.lz
)
((
$+
commands[lzip]
))
&&
tar
xvf
"
$file
"
;;
(
*
.tar.lz4
)
lz4
-c
-d
"
$file
"
|
tar
xvf -
;;
(
*
.tar.lrz
)
((
$+
commands[lrzuntar]
))
&&
lrzuntar
"
$file
"
;;
(
*
.gz
)
((
$+
commands[pigz]
))
&&
pigz
-dk
"
$file
"
||
gunzip
-k
"
$file
"
;;
(
*
.bz2
)
bunzip2
"
$file
"
;;
(
*
.xz
)
unxz
"
$file
"
;;
(
*
.lrz
)
((
$+
commands[lrunzip]
))
&&
lrunzip
"
$file
"
;;
(
*
.lz4
)
lz4
-d
"
$file
"
;;
(
*
.lzma
)
unlzma
"
$file
"
;;
(
*
.z
)
uncompress
"
$file
"
;;
(
*
.zip|
*
.war|
*
.jar|
*
.ear|
*
.sublime-package|
*
.ipa|
*
.ipsw|
*
.xpi|
*
.apk|
*
.aar|
*
.whl
)
unzip
"
$file
"
-d
"
$extract_dir
"
;;
(
*
.rar
)
unrar x
-ad
"
$file
"
;;
(
*
.rpm
)
command mkdir
-p
"
$extract_dir
"
&&
builtin cd
-q
"
$extract_dir
"
\
&&
rpm2cpio
"
$full_path
"
| cpio
--quiet
-id
;;
(
*
.7z
)
7za x
"
$file
"
;;
(
*
.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
;
extract ../data.tar.
*
cd
..
;
rm
*
.tar.
*
debian-binary
cd
..
;;
(
*
.zst
)
unzstd
"
$1
"
;;
command mkdir
-p
"
$extract_dir
/control"
"
$extract_dir
/data"
builtin cd
-q
"
$extract_dir
"
;
ar vx
"
$full_path
"
>
/dev/null
builtin cd
-q
control
;
extract ../control.tar.
*
builtin cd
-q
../data
;
extract ../data.tar.
*
builtin cd
-q
..
;
command rm
*
.tar.
*
debian-binary
;;
(
*
.zst
)
unzstd
"
$file
"
;;
(
*
.cab
)
cabextract
-d
"
$extract_dir
"
"
$file
"
;;
(
*
.cpio
)
cpio
-idmvF
"
$file
"
;;
(
*
)
echo
"extract: '
$1
' cannot be extracted"
>
&2
success
=
1
;;
echo
"extract: '
$file
' cannot be extracted"
>
&2
success
=
1
;;
esac
((
success
=
$
success
>
0 ?
$
success
:
$?
))
((
$
success
==
0
))
&&
((
$
remove_archive
==
0
))
&&
rm
"
$
1
"
((
success
=
success
>
0 ? success :
$?
))
((
success
==
0
&&
remove_archive
==
0
))
&&
rm
"
$
full_path
"
shift
# Go back to original working directory in case we ran cd previously
builtin cd
-q
"
$pwd
"
done
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment