bashを使用して/dev/disks配列を一覧表示する情報を拡張または置き換える方法は?

bashを使用して/dev/disks配列を一覧表示する情報を拡張または置き換える方法は?

私が望む出力:

diskutil list; diskutil info [multiple devices]

以下を行う必要はありません。

diskutil info disk0; diskutil info disk0s1; diskutil info disk1...など

たとえば、などの組み込みコマンドが多数ある場合は、touch rm mkdir角かっこ拡張を使用してファイルのさまざまなバージョンでコマンドを実行できます。

mkdir njboot0{1,2,3}

または、検索時に特殊文字を使用して、文字列内で一致させる特定のパターンを指定できます。たとえば、次のようになります。

find ~/ -type f \( -name *mp3 -or -name *mp4 \)

しかし:

diskutil info disk{0,0s1,1,1s1}    #syntax error

diskutil info /dev/*               #syntax error

(diskutil info disk$'')$'0|1|2'    #syntax error

diskutil info disk\(0,s0\)         #syntax error

など...

diskutil info disk${disk}'0'$'s1'  #okay, getting somewhere. this works at least. 
  1. diskutil複数のディスクで上記のコマンドを正しく実行するにはどうすればよいですか?
  2. お持ちですか?一般的な拡張/代替のために従うことができる構文はありますか?

要求に応じて、次の結果が出力されますdiskutil list

/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.0 TB     disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            999.7 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3

ベストアンサー1

あなたが要求する中括弧拡張は、使用しているパターンと一致するディスク上のファイル/ディレクトリのみを拡張します。直面するもう1つの問題は、diskutil一度に1つ以上のパラメータを処理できないことです。これを拡張するには、whileループを実行してforループを繰り返しながら結果を渡す必要があります。diskutil

はい

$ for i in /dev/*; do diskutil "$i";done

2番目の質問については、ディスクにファイル/ディレクトリがない場合は、中かっこ拡張を使用して助けることができる方法はありません。

diskutilの解析

このコマンドの出力が与えられたら、追加クエリのための2番目の呼び出しのためにディスクに関する意味のある情報を取得できるように、またはawk同じsedツールを使用してこの出力を「分析」する必要があります。grepdiskutil

はい

diskutilgrep以下は、使用して解析する出力をおおよそ見てみましょうsed。これを行うより効率的な方法がありますが、これは一般的なアプローチを示しています。

$ diskutil list | grep -E "[ ]+[0-9]+:.*disk[0-9]+" | sed 's/.*\(disk.*\)/\1/'
disk0
disk0s1
disk0s2
disk0s3

forこのアプローチを使用すると、上記のループを次のように変更できます。

$ for i in $(diskutil list | grep -E "[ ]+[0-9]+:.*disk[0-9]+" | \
    sed 's/.*\(disk.*\)/\1/'); do diskutil info $i; done

おすすめ記事