Skip to content

Commit

Permalink
feat: extract function
Browse files Browse the repository at this point in the history
Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
  • Loading branch information
vladdoster committed Nov 20, 2023
1 parent 6fe2efa commit 7d857a2
Showing 1 changed file with 63 additions and 0 deletions.
63 changes: 63 additions & 0 deletions zsh/.config/zsh/functions/extract
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#autoload

extract () {
local remove_archive
local success
local file_name
local extract_dir
if [[ "$1" == "" ]]; then
echo "Usage: extract [-option] [file ...]"
echo
echo "Options:"
echo " -r, --remove : Remove archive."
echo
fi
remove_archive=1
if [[ "$1" == "-r" ]] || [[ "$1" == "--remove" ]]; then
remove_archive=0
shift
fi
while [ -n "$1" ]; do
if [[ ! -f "$1" ]]; then
print "'$1' is not a valid file"
shift
continue
fi
success=0
file_name="$( basename "$1" )"
extract_dir="$( echo "$file_name" | sed "s/\.${1##*.}//g" )"
case "$1" in
(*.tar.gz|*.tgz) tar xvzf "$1" ;;
(*.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.zstd) tar -I zstd -xvf "$1" ;;
(*.tar) tar xvf "$1" ;;
(*.gz) gunzip "$1" ;;
(*.bz2) bunzip2 "$1" ;;
(*.xz) unxz "$1" ;;
(*.lzma) unlzma "$1" ;;
(*.Z) uncompress "$1" ;;
(*.zip) unzip "$1" -d $extract_dir ;;
(*.rar) unrar e -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 .. ;;
(*) print "'$1' cannot be extracted" >&2
success=1 ;;
esac
(( success = $success > 0 ? $success : $? ))
(( $success == 0 )) && (( $remove_archive == 0 )) && rm "$1"
shift
done
return 0
}

0 comments on commit 7d857a2

Please sign in to comment.