- Change shebangs to use 'env' in prep for NixOS (and others) - `agenda` now has a symlink to the underlying tree structure named ".tree" - `binbox` has more checking, being prepped for automatic export of symlinks. - `cdz` now symlinks to the archive directory using "<archive name>.tmp". This is less confusing than a randomized extraction folder, and adds the benefit of being in the FS-tree of the original archive. - daisy.source changes: > Added basic debug mode. > `ched` can now set global (all of the shell) editor or local (lackadaisical utils only) editor. > The encoding/decoding functions have been expanded and improved. Extra checking, permissions are stored as well, `daisy_dec` can handle stdin. - Added new functions to manage lackadaisical config: daisy_backup (runs `bak` on config files), daisy_clear (removes config files), and daisy_restore (restores config files archived using bak). - All functions/tools prefixed with 'daisy_' are now also available prefixed with 'ld_' instead - Added a new utility, `clip`. This utility keeps a local variable that can be set if given args and get if no args are supplied. Basically a simple clipboard local to the ptty. Supports stdin.
118 lines
2.6 KiB
Bash
Executable file
118 lines
2.6 KiB
Bash
Executable file
#!/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"
|