-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:ので、後の16スペースで始まる最初の行をgrepしたいと思います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

いくつかの小さなコマンドを実行すると、通常、1つのジャイアントsystem_profiler(私のシステムでは約700k)を実行してから、それを繰り返し実行するよりも高速になります(ファイル全体を数回再読み取りする必要があります)。小さいコマンドを実行すると、(のような)高価なデータ型を完全に回避できますSPApplicationsDataTypegrepSATA情報だけを見ていることがわかっていると、より簡単になります。

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

これに出力をパイプします:

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

system_profilerコマンドを使用すると、出力を単一のカテゴリに制限することもできます。

$ system_profiler SPSerialATADataType | grep Model: | head -1
          Model: FUJITSU MHZ2120BH G1                    
$ 

しかし、私はロブ・ネピアに同意しdiskutilます、これにはより良い選択です。

$ diskutil info -plist /dev/disk0 | awk '/<key>MediaName<\/key>/{getline;gsub(/<[^>]+>/,"");print;exit;}'
        FUJITSU MHZ2120BH G1 Media
于 2012-02-01T16:18:48.333 に答える