Added cdz check parameter for use in multicd (normal cd, squash cd and cdz).
Consolidated all squash functionality into a binary (squasher) Updated the 'cd' alias (multicd). Added -e to ldrc (to edit the user scripts)
This commit is contained in:
parent
83324dd0f7
commit
10d81b7e5b
8 changed files with 288 additions and 271 deletions
98
cdz
98
cdz
|
|
@ -1,57 +1,122 @@
|
|||
#!/usr/bin/env bash
|
||||
# Usage: cdz <archive>
|
||||
# Usage: cdz [--check] <archive>
|
||||
|
||||
if [[ $LD_INTERNAL -ne 1 ]]; then
|
||||
if [[ $LD_INTERNAL -ne 1 ]]
|
||||
then
|
||||
LD_INTERNAL=1
|
||||
. $(dirname $(realpath $0))/daisy.source
|
||||
fi
|
||||
|
||||
is_archive()
|
||||
{
|
||||
local file="$1"
|
||||
local mime_type=$(file --mime-type -b "$file")
|
||||
|
||||
if [[ $mime_type == *"tar"* || $file == *.tar* || $mime_type == "application/zip" || $mime_type == "application/x-rar" ]]
|
||||
then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if command -v archivemount >/dev/null 2>&1
|
||||
then
|
||||
local test_dir=$(mktemp -d /tmp/cdz_check.XXXXXXXX)
|
||||
local result=1
|
||||
if archivemount -o readonly "$file" "$test_dir" >/dev/null 2>&1
|
||||
then
|
||||
result=0
|
||||
umount "$test_dir"
|
||||
fi
|
||||
rmdir "$test_dir"
|
||||
return $result
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
check_mode=0
|
||||
if [[ "$1" == "--check" ]]
|
||||
then
|
||||
check_mode=1
|
||||
shift
|
||||
fi
|
||||
|
||||
target=$1
|
||||
if [[ -z "$target" ]]; then
|
||||
echo "No target specified."
|
||||
if [[ -z "$target" ]]
|
||||
then
|
||||
if [[ $check_mode -eq 0 ]]
|
||||
then
|
||||
echo "No target specified."
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$target" ]]; then
|
||||
echo "File not found: \"$target\""
|
||||
if [[ ! -f "$target" ]]
|
||||
then
|
||||
if [[ $check_mode -eq 0 ]]
|
||||
then
|
||||
echo "File not found: \"$target\""
|
||||
fi
|
||||
exit 2
|
||||
fi
|
||||
|
||||
target_abs=$(realpath "$target")
|
||||
name=$(basename "$target")
|
||||
|
||||
if is_archive "$target_abs"
|
||||
then
|
||||
if [[ $check_mode -eq 1 ]]
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
if [[ $check_mode -eq 1 ]]
|
||||
then
|
||||
exit 1
|
||||
fi
|
||||
mime_type=$(file --mime-type -b "$target_abs")
|
||||
echo "Unsupported archive type: $mime_type"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Proceed with extraction
|
||||
has_archivemount=$(command -v archivemount >/dev/null 2>&1; echo $?)
|
||||
|
||||
if [[ $has_archivemount -eq 0 && $NO_ARCHIVEMOUNT -ne 1 ]]; then
|
||||
if [[ $has_archivemount -eq 0 && $NO_ARCHIVEMOUNT -ne 1 ]]
|
||||
then
|
||||
use_mounter=1
|
||||
else
|
||||
use_mounter=0
|
||||
fi
|
||||
|
||||
mime_type=$(file --mime-type -b "$target")
|
||||
|
||||
mime_type=$(file --mime-type -b "$target_abs")
|
||||
comm1=(:)
|
||||
comm2=(echo "Unsupported archive type: $mime_type")
|
||||
comm3=(:)
|
||||
comm4=(:)
|
||||
comm5=(:)
|
||||
|
||||
if [[ $use_mounter -eq 1 ]]; then
|
||||
if [[ $use_mounter -eq 1 ]]
|
||||
then
|
||||
echo "Using archivemount..."
|
||||
comm2=(archivemount -o allow_root,use_ino "$target_abs")
|
||||
comm4=(cd ..)
|
||||
comm5=(umount)
|
||||
elif [[ $mime_type == *"tar"* || $target == *.tar* ]]; then
|
||||
elif [[ $mime_type == *"tar"* || $target_abs == *.tar* ]]
|
||||
then
|
||||
comm2=(tar xvf "$target_abs" -C)
|
||||
elif [[ $mime_type == "application/zip" ]]; then
|
||||
if command -v unzip >/dev/null 2>&1; then
|
||||
elif [[ $mime_type == "application/zip" ]]
|
||||
then
|
||||
if command -v unzip >/dev/null 2>&1
|
||||
then
|
||||
comm2=(unzip -q "$target_abs" -d)
|
||||
else
|
||||
comm1=(echo "unzip is missing")
|
||||
comm3=(exit 1)
|
||||
fi
|
||||
elif [[ $mime_type == "application/x-rar" ]]; then
|
||||
if command -v unrar >/dev/null 2>&1; then
|
||||
elif [[ $mime_type == "application/x-rar" ]]
|
||||
then
|
||||
if command -v unrar >/dev/null 2>&1
|
||||
then
|
||||
# unrar needs the directory as the last argument
|
||||
comm2=(unrar x -idq "$target_abs")
|
||||
else
|
||||
|
|
@ -63,7 +128,8 @@ fi
|
|||
dir=$(mktemp -d /tmp/extracted.XXXXXXXX)
|
||||
|
||||
"${comm1[@]}"
|
||||
if [[ ${comm2[0]} == "unrar" ]]; then
|
||||
if [[ ${comm2[0]} == "unrar" ]]
|
||||
then
|
||||
"${comm2[@]}" "$dir"
|
||||
else
|
||||
"${comm2[@]}" "$dir"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue