dotfiles/.local/bin/scripts/moul

75 lines
2.2 KiB
Plaintext
Raw Normal View History

2023-04-21 07:26:34 +00:00
#!/bin/sh
2021-10-27 08:00:54 +00:00
# Mount a partition by label or device identifier automatically
2023-04-07 17:33:05 +00:00
# Includes interactive selection if no argument is given
2023-11-07 09:56:27 +00:00
# TODO losetup for raw and qcow2, including lvm handling
2022-09-09 19:49:37 +00:00
set -eo pipefail
_help="$0 <device> [mountpoint] [options...]"
case $1 in
2023-04-21 07:26:34 +00:00
(-v) shift
bash -x "$0" "$@";;
("") # TODO include size
arg=$(
{
#for ip in $(sudo nmblookup -S \* | grep '^[0-9]' | cut -d' ' -f1)
#do timeout --kill-after=.1s .1s showmount --no-headers --exports "$ip" 2>/dev/null | sed "s|\([^ ]*\) .*|$ip:\1|"
#done &
# TODO handle labels with spaces
lsblk --list --noheadings --output name,label,fstype,mountpoint | grep -v LUKS | grep -v '/' | grep ".\+ [^ ]\+";
} | fzf --exit-0 | sed "s/^\([^ ]\+ \+\)\?\([^ ]\+\) \+[^ ]\+ *$/\2/"
);;
(--help) echo "$_help" && exit 0;;
(-u) shift
for last; do true; done
sudo umount --verbose "$@"
code=$?
sudo rm -df "$last"
exit $code;;
(*) arg=$1
shift;;
esac
2024-01-12 16:53:41 +00:00
# FILE as loopback device
if test -f "$arg"
then set -e
loopdevice="$(sudo losetup -f)"
sudo losetup -P -v "$loopdevice" "$arg"
$0 "$loopdevice"
exit $?
fi
# FSTAB: BY LABEL
if grep --word-regexp "LABEL=$arg" /etc/fstab
2022-01-31 09:36:25 +00:00
then # have to mount twice as the first one might be creating the directory
2023-04-21 07:26:34 +00:00
mount -L "$arg" "$@" 2>/dev/null || mount -L "$arg" "$@"
exit $?
2021-11-09 04:17:51 +00:00
fi
# FSTAB: BY MOUNTPOINT/NAME
if grep --word-regexp "$arg" /etc/fstab
2022-12-22 14:40:56 +00:00
then mount "$arg" "$@"; exit $?
2021-11-09 04:17:51 +00:00
fi
# MANUALLY
mountpoint="${2:-${MNT:-${XDG_RUNTIME_DIR}/mnt}/$(basename "$arg")}"
2021-11-09 04:17:51 +00:00
if grep -e "[^\w=/]$mountpoint[^\w/]" /etc/fstab
2022-09-09 19:49:37 +00:00
then test $# -gt 0 && shift
2023-04-21 07:26:34 +00:00
mount "$mountpoint" "$@"
code=$?
cd $mountpoint
exit $code
2021-11-09 04:17:51 +00:00
fi
2021-12-02 17:15:26 +00:00
case "$arg" in
2023-04-21 07:26:34 +00:00
(sd*|loop*|nvme*|mm*|md*|dm*|vg*) partition="/dev/$arg";;
(/dev/*) partition="$arg";;
(*) params="-L"
partition="$arg";;
2021-11-04 11:19:43 +00:00
esac
2022-09-09 19:49:37 +00:00
shift $(expr 2 \& $# \> 2 \| $#)
#uid=$(id --user),gid=$(id --group), \
2021-12-16 22:04:50 +00:00
if ! mountpoint "$mountpoint" 2>/dev/null
then mp="/run/media/$USER/$arg" && test -e "$mp" && mountpoint="$mp"
2023-04-21 07:26:34 +00:00
sudo mount -vo users,X-mount.mkdir,noatime,umask=003,gid=users,uid=$USER $params "$partition" "$mountpoint" "$@" ||
sudo mount -vo users,X-mount.mkdir,noatime $params "$partition" "$mountpoint" "$@"
2021-12-16 22:04:50 +00:00
fi
2021-10-27 08:00:54 +00:00
cd $mountpoint
exec $SHELL