#!/usr/bin/env bash if [[ $LD_INTERNAL -ne 1 ]]; then LD_INTERNAL=1 . $(dirname $(realpath $0))/daisy.source fi target=$1 # Check if file exists if [[ -z "$target" ]]; then echo "No target specified." exit 1 fi if ! test -f "$target"; then echo "File not found: \"$target\"" exit 2 fi # Check if archivemount is present which archivemount 1>/dev/null 2>/dev/null hasmounter=$? file "$target" 1>/dev/null exitcode=$? report=$(file "$target") name=$(echo $@ | sed 's/:.*//' | sed 's|.*/||') # Check for archive type, supported types are zip/tar/rar comm1=(:) comm2=(echo "Unsupported archive type$add: \"$target\"") comm3=(:) comm4=(:) comm5=(:) echo $report | grep "tar archive" 1>/dev/null istar=$? echo $report | grep "Zip archive" 1>/dev/null iszip=$? echo $report | grep "Android" 1>/dev/null iszip=$? echo $report | grep "RAR archive" 1>/dev/null israr=$? # TAR archives come in many forms, if none of our tests say it's tar # ...but it looks like tar and barks like tar, let's take the shot. # Seems to work fairly well for the record. res=$(echo "$target" | grep ".tar") if [[ $res != "" ]]; then istar=0 fi if [[ $NO_ARCHIVEMOUNT -eq 1 ]]; then hasmounter=1 fi if (( $hasmounter == 0 )); then echo "We have \`archivemount\`, so we'll use that!" echo "If you'd prefer we not use it, please specify NO_ARCHIVEMOUNT=1" istar=1 iszip=1 israr=1 fi # Now we set the right command if (( $istar == 0 )); then comm2=(tar xvf "$target" -C) elif (( $iszip == 0 )); then which unzip 1>/dev/null exitcode=$? if (( $exitcode == 0 )); then comm2=(unzip -q "$target" -d) else comm1=(echo "The utility 'unzip' is missing, please install it") comm3=(exit 1) fi elif (( $israr == 0 )); then which unrar 1>/dev/null exitcode=$? if (( exitcode == 0 )); then comm2=(unrar -i nul "$target") else comm1=(echo "The utility 'unrar' is missing, please install it") comm3=(exit 1) fi elif (( $hasmounter == 0 )); then comm2=(archivemount -o allow_root -o use_ino "$target") comm4=(cd ..) comm5=(umount) fi # Create the temp dir, usually dir=$(mktemp -d /tmp/extracted.XXXXXXXX) # And the rest of the commands "${comm1[@]}" "${comm2[@]}" $dir "${comm3[@]}" currentpath=$(pwd) sym="$currentpath/$name.tmp" ln -f -s "$dir" "$sym" cd "$sym" echo "A symlink has been made under the name \"$sym\"." echo "This symlink points to the data directory \"$dir\"." echo "Type 'exit' to exit the extracted archive's folder and auto-delete it." eval $SHELL "${comm4[@]}" "${comm5[@]}" $dir rm -rf $dir rm "$sym"