#!/bin/sh # Mount a partition by label or device identifier automatically set -eo pipefail _help="$0 [mountpoint] [options...]" case $1 in ("") # TODO include size arg=$(lsblk --list --noheadings --output name,label,fstype,mountpoint | grep -v '/' | grep ".\+ [^ ]\+" | fzf --select-1 --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;; esac # FSTAB: BY LABEL if grep --word-regexp "LABEL=$arg" /etc/fstab then # have to mount twice as the first one might be creating the directory mount -L "$@" 2>/dev/null || mount -L "$@" exit $? fi # FSTAB: BY MOUNTPOINT/NAME if grep --word-regexp "$arg" /etc/fstab then mount "$@"; exit $? fi # MANUALLY mountpoint="${2:-${MNT:-${XDG_RUNTIME_DIR}/mnt}/$(basename "$arg")}" if grep -e "[^\w=/]$mountpoint[^\w/]" /etc/fstab then test $# -gt 0 && shift mount "$mountpoint" "$@" code=$? cd $mountpoint exit $code fi case "$arg" in (sd*|loop*|nvme*|mm*|md*|dm*|vg*) partition="/dev/$arg";; (/dev/*) partition="$arg";; (*) partition="-L $arg";; esac shift $(expr 2 \& $# \> 2 \| $#) #uid=$(id --user),gid=$(id --group), \ if ! mountpoint "$mountpoint" 2>/dev/null then mp="/run/media/$USER/$arg" && test -e "$mp" && mountpoint="$mp" sudo mount -vo users,X-mount.mkdir,noatime,umask=003,gid=users,uid=$USER $partition $mountpoint "$@" fi cd $mountpoint exec $SHELL