69 lines
1.8 KiB
Bash
Executable File
69 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
|
|
# Dmenu to mount/unmount partitions.
|
|
|
|
ScriptName=${0##*/}
|
|
Version=1.0.0
|
|
|
|
# Set menu options:
|
|
MenuMount='1. Mount a partition.'
|
|
MenuUnmount='2. Unmount a partition.'
|
|
|
|
ChosenMenu=$(printf '%s\n%s' \
|
|
"$MenuMount" "$MenuUnmount" \
|
|
| dmenu -i -l 10 -p "$ScriptName:")
|
|
|
|
# Mount a partition:
|
|
if [ "$ChosenMenu" = "$MenuMount" ]; then
|
|
Mountable=$(lsblk -lp \
|
|
| grep "part $" \
|
|
| awk '{print $1, "(" $4 ")"}')
|
|
[ -z "$Mountable" ] && exit 1
|
|
|
|
Chosen=$(printf '%s' "$Mountable" \
|
|
| dmenu -i -l 10 -p 'Mount which drive?' \
|
|
| awk '{print $1}')
|
|
[ -z "$Chosen" ] && exit 1
|
|
|
|
# Try to mount directly based on fstab:
|
|
sudo mount "$Chosen" && exit 0
|
|
# Otherwise ask for directory.
|
|
|
|
### Implement a way to exclude already mounted locations.
|
|
|
|
Directories=$(find /mnt -maxdepth 1 -type d 2>/dev/null)
|
|
MountPoint=$(printf '%s' "$Directories" \
|
|
| dmenu -i -l 10 -p 'Type in mount point:')
|
|
[ -z "$MountPoint" ] && exit 1
|
|
|
|
if [ ! -d "$MountPoint" ]; then
|
|
mkdirprompt=$(printf 'No\\nYes' \
|
|
| dmenu -i -p "$MountPoint does not exist. Create it?")
|
|
[ "$mkdirprompt" = 'Yes' ] && sudo mkdir -p "$MountPoint"
|
|
fi
|
|
|
|
sudo mount "$Chosen" "$MountPoint"
|
|
|
|
# Unmount a partition:
|
|
elif [ "$ChosenMenu" = "$MenuUnmount" ]; then
|
|
ExclusionRegex='\(/boot\|/home\|/\|/backup\|/backup/extra\)$'
|
|
|
|
Drives=$(lsblk -lp \
|
|
| grep "part /" \
|
|
| grep -v "$ExclusionRegex" \
|
|
| awk '{print $1, "(" $4 ")", "on", $7}')
|
|
[ -z "$Drives" ] && exit 1
|
|
|
|
Chosen=$(printf '%s' "$Drives" \
|
|
| dmenu -i -l 10 -p 'Unmount which drive?' \
|
|
| awk '{print $1}')
|
|
[ -z "$Chosen" ] && exit 1
|
|
|
|
sudo umount "$Chosen"
|
|
elif [ -z "$ChosenMenu" ]; then
|
|
exit 1
|
|
else
|
|
printf 'ERROR: invalid selection.\n'
|
|
exit 1
|
|
fi
|