This commit is contained in:
Dylan Roman 2026-05-18 10:08:38 +02:00 committed by GitHub
commit 48f6baa37b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 36 additions and 4 deletions

View file

@ -53,5 +53,6 @@ local -a exts=(
_arguments \ _arguments \
'(-r --remove)'{-r,--remove}'[Remove archive.]' \ '(-r --remove)'{-r,--remove}'[Remove archive.]' \
'(-t --to-directory)'{-t,--to-directory}'[Extract to a specific directory.]' \
"*::archive file:_files -g '(#i)*.(${(j:|:)exts})(-.)'" \ "*::archive file:_files -g '(#i)*.(${(j:|:)exts})(-.)'" \
&& return 0 && return 0

39
plugins/extract/extract.plugin.zsh Normal file → Executable file
View file

@ -9,14 +9,41 @@ Usage: extract [-option] [file ...]
Options: Options:
-r, --remove Remove archive after unpacking. -r, --remove Remove archive after unpacking.
-t, --to-directory <dir> Extract to a specific directory instead of the current one.
EOF EOF
fi fi
local remove_archive=1 local remove_archive=1
if [[ "$1" == "-r" ]] || [[ "$1" == "--remove" ]]; then local target_directory=""
remove_archive=0
shift while (( $# > 0 )); do
fi case "$1" in
-r|--remove)
remove_archive=0
shift
;;
-t|--to-directory)
shift
if (( $# == 0 )); then
echo "extract: -t/--to-directory requires a directory argument" >&2
return 1
fi
target_directory="$1"
shift
if [[ ! -d "$target_directory" ]]; then
echo "extract: '$target_directory' is not a valid directory" >&2
return 1
fi
target_directory="${target_directory%/}"
;;
*)
break
;;
esac
done
local pwd="$PWD" local pwd="$PWD"
while (( $# > 0 )); do while (( $# > 0 )); do
@ -35,6 +62,10 @@ EOF
extract_dir="${extract_dir:r}" extract_dir="${extract_dir:r}"
fi fi
if [[ -n "$target_directory" ]]; then
extract_dir="$target_directory/${extract_dir:t}"
fi
# If there's a file or directory with the same name as the archive # If there's a file or directory with the same name as the archive
# add a random string to the end of the extract directory # add a random string to the end of the extract directory
if [[ -e "$extract_dir" ]]; then if [[ -e "$extract_dir" ]]; then