用Shell脚本自动化外设管理的小项目实践

每天插U盘、移动硬盘、机械键盘、游戏手柄,设备一多,手动挂载、备份、识别设备信息真够烦的。与其一次次重复操作,不如写个shell脚本让电脑自己干。

自动识别新插入的外设

把下面这个脚本丢进/usr/local/bin/device-monitor.sh,它会在你插入USB设备时自动弹出设备名和容量。

#!/bin/bash
while true; do
    lsusb > /tmp/lsusb.current
    if ! diff /tmp/lsusb.previous /tmp/lsusb.current > /dev/null; then
        echo "【新设备接入】" $(date)
        comm -13 <(sort /tmp/lsusb.previous) <(sort /tmp/lsusb.current)
    fi
    cp /tmp/lsusb.current /tmp/lsusb.previous
    sleep 2
done

自动挂载U盘并备份文件

我常把照片存进U盘带走,但每次插上都得手动创建目录、复制路径、输命令。现在写个脚本,插上就自动备份到本地~/backup_from_usb

#!/bin/bash
USB_PATH="/media/$USER"
BAK_DIR="$HOME/backup_from_usb"

if [ -d "$USB_PATH" ]; then
    for dir in $USB_PATH/*; do
        if [ -d "$dir/DCIM" ] || [ -f "$dir/*.jpg" ]; then
            mkdir -p "$BAK_DIR"
            rsync -av --progress "$dir/" "$BAK_DIR/$(basename $dir)_$(date +%m%d)" &
            notify-send "备份完成" "来自 $dir"
        fi
    fi
    break
    done
fi

一键检测外设性能

买了个高速U盘,标称读取300MB/s,到底是不是虚标?写个脚本测一下:

#!/bin/bash
DEVICE="/dev/disk/by-id/usb-SanDisk_Extreme_*"
if [ -L "$DEVICE" ]; then
    DEV_NAME=$(readlink -f $DEVICE)
    echo "开始测试 $DEV_NAME 读取速度..."
    sudo hdparm -Tt $DEV_NAME
fi

给机械键盘设置灯光模式(仅限支持hidraw的设备)

有些Linux下没官方驱动的键盘,可以用脚本发原始指令控制灯光。比如通过hidraw接口发送十六进制命令:

#!/bin/bash
# 假设键盘在 hidraw2
echo -ne \x05\x01\x03\x01 | sudo tee /dev/hidraw2 > /dev/null
notify-send "键盘灯光" "切换至呼吸模式"

这些小脚本不用复杂编程,却能实实在在省下时间。外设不是插上就能完事,搭配一点shell自动,才真正发挥它们的价值。