Skip to content

Instantly share code, notes, and snippets.

@fsmithred
Created May 4, 2016 14:20
Show Gist options
  • Save fsmithred/81a4e1585175c377c32ed2f670ab9ef3 to your computer and use it in GitHub Desktop.
Save fsmithred/81a4e1585175c377c32ed2f670ab9ef3 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
#
# thumb-pick4.sh
#set -x
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
# SESSION_TYPE=remote/ssh
echo "
This script will not let you mount
a usb drive on a remote host.
"
exit 1
fi
# Get devices: usb, sdcard (mmc) or cdrom. What's missing?
usbdevlist=$(/usr/sbin/hwinfo --usb --short | awk '/dev\/sd/ {print $1}')
usbdevfulllist=$(/usr/sbin/hwinfo --usb --short | awk '/dev\/sd/ {print $0}')
sdfulllist=$(/usr/sbin/hwinfo --disk --short | awk '/dev\/mmc/ { print $0 }')
sdlist=$(echo "$sdfulllist" | awk '/dev\/mmc/ { print $1 }')
if [[ $(/usr/sbin/hwinfo --cdrom | grep "Volume ID") ]] ; then
cdromfulllist=$(/usr/sbin/hwinfo --cdrom --short|grep "/dev/sr"|awk '{print $0}')
cdromlist=$(echo "$cdromfulllist" | awk '/dev\/sr/ { print $1 }')
fi
# If only one device is plugged in, don't ask which device to use.
if [[ $(echo "$usbdevlist" | wc -l) = 1 ]] && [[ -z "$sdlist" ]] && [[ -z "$cdromlist" ]]; then
device="$usbdevlist"
echo -e "\n\tREMOVABLE DRIVE\n${usbdevfulllist}\n\n"
elif [[ $(echo "$sdlist" | wc -l) = 1 ]] && [[ -z "$usbdevlist" ]] && [[ -z "$cdromlist" ]]; then
device="$sdlist"
echo -e "\n\tREMOVABLE DRIVE\n${sdfulllist}\n\n"
elif [[ $(echo "$cdromlist" | wc -l) = 1 ]] && [[ -z "$usbdevlist" ]] && [[ -z "$sdlist" ]]; then
device="$cdromlist"
echo -e "\n\tREMOVABLE DRIVE\n${cdromfulllist}\n\n"
else
echo -e "\n\tLIST OF REMOVABLE DRIVES\n${usbdevfulllist}\n${sdfulllist}\n${cdromfulllist}\n\nSelect a device:"
select opt in $usbdevlist $sdlist $cdromlist ; do
device=$(echo "$opt" | awk '{ print $1 }')
break
done
fi
# put device names and labels in a file for easy selection
tmplist=$(mktemp /tmp/tmplist.XXXX)
usbpartslist=$(mktemp /tmp/removableparts.XXXX)
# Get partitions on the selected device.
if [[ $device =~ "/dev/sd" ]] ; then
partition_list=$(lsblk -l | grep ${device##*/}[1-9] | awk '{ print $1 }')
elif [[ $device =~ "/dev/mmc" ]] ; then
partition_list=$(lsblk -l |grep mmc | awk '/part/ { print $1 }')
elif [[ $device =~ "/dev/sr" ]] ; then
partition_list="${device##*/}"
fi
echo "$partition_list" > "$tmplist"
while read line ; do
label=$(ls -l /dev/disk/by-label | grep $line | awk '{ print $9 }')
if [[ -n "$label" ]] ; then
echo "${line}_$label" >> "$usbpartslist"
else
echo "$line" >> "$usbpartslist"
fi
done < "$tmplist"
# Mount by label, else mount by name
# If only one partition, don't ask.
if [[ $(echo "$partition_list" | wc -l) = 1 ]] ; then
part=$(cat "$usbpartslist")
selected_label=$(echo "$part" | awk -F"_" '{ print $2 }')
selected_part=$(echo "$part" | awk -F"_" '{ print $1 }')
if [[ -n "$selected_label" ]] ; then
echo "Mounting $selected_label"
pmount "$selected_part" "$selected_label"
else
echo "Mounting $selected_part"
pmount "$selected_part"
fi
else
echo "Select a partition to mount:"
select part in $(cat "$usbpartslist") ; do
selected_label=$(echo "$part" | awk -F"_" '{ print $2 }')
selected_part=$(echo "$part" | awk -F"_" '{ print $1 }')
if [[ -n "$selected_label" ]] ; then
echo "Mounting $selected_label"
pmount "$selected_part" "$selected_label"
else
echo "Mounting $selected_part"
pmount "$selected_part"
fi
break
done
fi
rm -f "$usbpartslist"
rm -f "$tmplist"
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment