-1

我正在尝试使用 OSX 终端使用该system_profiler命令查找我的硬盘的名称。我将输出发送到文本文件。这是输出的一部分...

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 以 . 之后的 16 个空格开头的第一行Serial-ATA:。由于 的输出system_profiler具有可变数量的行,我真的不想使用grep -A.

我尝试了各种 greps、awks 和 seds 但无济于事。

有什么想法吗?干杯。

4

4 回答 4

3

diskutil这比确定使用更容易(也更快)system_profiler

diskutil info /dev/disk0 | grep 'Media Name:' | cut -f2 -d:

更多想法:

system_profiler太贵了。您通常应该只收集您关心的数据类型。例如:

system_profiler SPSerialATADataType SPPrintersDataType

运行一些较小的命令通常比运行一个巨型命令system_profiler(在我的系统上约为 700k)然后重复 grepping 它(这需要多次重新读取整个文件)更快。运行较小的命令可以完全避免昂贵的数据类型(如SPApplicationsDataType)。grep如果您知道您只查看 SATA 信息,这会更容易。

不过,我仍然会diskutil用来获取这些特定信息。它可能会更快更容易(至少在大多数情况下),并且会让您获得正确的驱动器。这两种技术都在假设您想要什么驱动器。您的方法寻找第一个 SATA 驱动器。我的方法着眼于disk0。正确的方法通常是查看引导驱动器 (/)。您可以diskutil再次使用以下方法轻松确定:

diskutil info `diskutil list / | head -1` | grep 'Media Name:' | cut -f2 -d:
于 2012-02-01T16:12:56.110 回答
2
system_profiler |
awk '
   /Serial ATA/ { flag = 1 }
   flag && /^                [^ ]/ {print; exit}
'
于 2012-02-01T16:11:06.230 回答
0

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
于 2012-02-01T16:18:48.333 回答
0

将输出添加到此:

awk '/^                / {print $1, $2; exit; }'
于 2012-02-01T16:02:55.793 回答