This repository has been archived on 2022-08-21. You can view files and clone it, but cannot push or open issues or pull requests.
dotfiles/home/.config/fish/functions/extract.fish

87 lines
2.9 KiB
Fish

function extract -d "Extract archives"
set -l remove_archive
set -l success
set -l extract_dir
if test -z "$argv[1]"
echo -e "\e[1;34mUsage:\e[0m extract [-option] [file...]
\e[1;33mOptions:\e[0m
-r, --remove Remove archive after unpacking."
end
set remove_archive 1
if [ "$argv[1]" = "-r" ] || [ "$argv[1]" = "--remove" ]
set remove_archive 0
set --erase argv[1]
end
while test -n "$argv[1]"
if not test -f "$argv[1]"
echo "extract: '$argv[1]' is not a valid file" >&2
set --erase argv[1]
continue
end
set success 0
set extract_dir (echo "$argv[1]" | cut -d'.' -f1)
switch "$argv[1]"
case "*.tar.gz" or "*.tgz"
tar zxvf "$argv[1]"
case "*.tar.bz2" or "*.tbz" or "*.tbz2"
tar xvjf "$argv[1]"
case "*.tar.xz" or "*.txz"
tar --xz -xvf "$argv[1]"; or xzcat "$argv[1]" | tar xvf -
case "*.tar.zma" or "*.tlz"
tar --lzma -xvf "$argv[1]"; or lzcat "$argv[1]" | tar xvf -
case "*.tar.zst" or "*.tzst"
tar --zstd -xvf "$argv[1]"; or zstdcat "$argv[1]" | tar xvf -
case "*.tar" or "*.tar.lz"
tar xvf "$argv[1]"
case "*.tar.lz4"
lz4 -c -d "$argv[1]" | tar xvf -
case "*.tar.lrz"
lrzuntar "$argv[1]"
case "*.gz"
gunzip -d "$argv[1]"
case "*.bz2"
bunzip2 "$argv[1]"
case "*.xz"
unxz "$argv[1]"
case "*.lrz"
lrunzip "$argv[1]"
case "*.lz4"
lz4 -d "$argv[1]"
case "*.lzma"
unlzma "$argv[1]"
case "*.z"
uncompress "$argv[1]"
case "*.zip" or "*.war" or "*.jar" or "*.sublime-package" or "*.ipa" or "*.ipsw" or "*.xpi" or "*.apk" or "*.aar" or "*.whl"
unzip "$argv[1]" -d "$extract_dir"
case "*.rar"
unrar x -ad "$argv[1]"
case "*.rpm"
mkdir "$extract_dir"; and cd "$extract_dir"; and rpm2cpio "../$argv[1]" | cpio --quiet -id; and cd ..
case "*.7z"
7za x "$argv[1]"
case "*.deb"
mkdir -p "$extract_dir/control"
mkdir -p "$extract_dir/data"
cd "$extract_dir"; ar vx "../$argv[1]" > /dev/null
cd control; tar xzvf ../control.tar.gz
cd ../data; extract ../data.tar.*
cd ..; rm *.tar.* debian-binary
cd ..
case "*.zst"
unzstd "$argv[1]"
case "*"
echo "extract: '$argv[1]' cannot be extracted" >&2
set success 1
end
if [ "$success" = 0 ] && [ "$remove_archive" = 0 ]
rm "$argv[1]"
end
set --erase argv[1]
end
end