bash,searchUSB存储设备。 输出位置

我正在寻找一种方式来列出任何USB连接的设备或可移动存储介质。

我将使用这个列表为一个gtk引导媒体作家,所以用户可以很容易地写一个iso到一个USB。

这创build了所有分区的完美列表:

ls /dev | grep "[sh]d[az][1-9]" 

我怎样才能得到一个只有可移动媒体的类似的清单?

在我的系统上(Ubuntu 12.04),我可以得到USB设备和分区列表

 ls /dev/disk/by-path/*usb* 

 /dev/disk/by-path/pci-0000:00:02.1-usb-0:1.1:1.0-scsi-0:0:0:0 /dev/disk/by-path/pci-0000:00:02.1-usb-0:1.1:1.0-scsi-0:0:0:0-part1 

或单独的分区

 ls /dev/disk/by-path/*usb*part* 

这些是符号链接,指向真实的设备文件,例如/dev/sdd/dev/sdd1

我已经用USB棒和外部USB硬盘进行了测试。 我不能说,这是否或如何与eSATA或火线磁盘工作。

基于Olaf Dietsche的回答,我最终得出以下结论:

 devs=`ls -al /dev/disk/by-path/*usb*part* 2>/dev/null | awk '{print($11)}'`; for dev in $devs; do dev=${dev##*\/}; echo -n "$dev ("; echo -n `mount | grep \`echo -E ${dev}\` | awk '{print($3)}'`; echo ")"; done 

对于我来说,上面的代码显示了USB设备和它们的安装位置(括号之间)。 它工作在Ubuntu 13.04和12.04.2,但我不知道它是否可以在任何其他系统上工作。

也许你可以使用lsusb命令的输出:

 lsusb Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0db0:3870 Micro Star International Bus 002 Device 003: ID 0000:0000 Bus 002 Device 004: ID 14cd:6116 Super Top M6116 SATA Bridge 

获取USB存储使用的挂载路径

mount | grep / media | awk'{print $ 3}'

对命令的解释

mount将打印所有安装的驱动器,grep将仅显示安装在/ media中的驱动器(考虑/ media是默认安装点),这个输出被传送到awk,这将打印USB驱动器的安装路径