我正试图使用system_profiler
命令使用OSX终端查找硬盘的名称。我正在将输出发送到一个文本文件中。这是输出的一部分。。。
Serial-ATA:
Intel ICH8-M AHCI:
Vendor: Intel
Product: ICH8-M AHCI
Link Speed: 1.5 Gigabit
Negotiated Link Speed: 1.5 Gigabit
Description: AHCI Version 1.10 Supported
FUJITSU MHY2160BH:
Capacity: 160.04 G
我要查找的部分是FUJITSU MHY2160BH:
,所以我想grep第一行,它以Serial-ATA:
后面的16个空格开头。由于system_profiler
的输出具有可变的行数,所以我并不想使用grep -A
。
我试过各种各样的greps、awks和sed,但都无济于事。
有什么想法吗?干杯
使用diskutil
比system_profiler
:更容易(更快)确定
diskutil info /dev/disk0 | grep 'Media Name:' | cut -f2 -d:
更多想法:
CCD_ 8价格昂贵。您通常应该只收集您关心的数据类型。例如:
system_profiler SPSerialATADataType SPPrintersDataType
运行几个较小的命令通常会比运行一个巨大的system_profiler
(在我的系统上大约700k)然后重复地grepping它(这需要多次重读整个文件)更快。运行较小的命令可以完全避免昂贵的数据类型(如SPApplicationsDataType
)。如果您知道自己只查看SATA信息,grep
会更容易。
不过,我仍然会使用diskutil
来获取这些特定信息。它可能会更快、更容易(至少在大多数情况下),并让你获得正确的驱动器。这两种技术都是在假设你想要什么驱动器。您的方法寻找第一个SATA驱动器。我的方法是查看磁盘0。正确的方法通常是查看引导驱动器(/)。您可以再次使用diskutil
轻松确定:
diskutil info `diskutil list / | head -1` | grep 'Media Name:' | cut -f2 -d:
system_profiler |
awk '
/Serial ATA/ { flag = 1 }
flag && /^ [^ ]/ {print; exit}
'
将输出用管道传输到此:
awk '/^ / {print $1, $2; exit; }'
system_profiler命令还允许您将其输出限制为一个类别:
$ system_profiler SPSerialATADataType | grep Model: | head -1
Model: FUJITSU MHZ2120BH G1
$
但我同意Rob Napier的观点,diskutil
是更好的选择。
$ diskutil info -plist /dev/disk0 | awk '/<key>MediaName</key>/{getline;gsub(/<[^>]+>/,"");print;exit;}'
FUJITSU MHZ2120BH G1 Media