私が望む出力:
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.
diskutil
複数のディスクで上記のコマンドを正しく実行するにはどうすればよいですか?- お持ちですか?一般的な拡張/代替のために従うことができる構文はありますか?
要求に応じて、次の結果が出力されます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
ツールを使用してこの出力を「分析」する必要があります。grep
diskutil
はい
diskutil
grep
以下は、使用して解析する出力をおおよそ見てみましょう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
答え2
出力がdiskutil list
次の場合disk0 disk0s1 disk1 disk1s1
(空白または改行文字で区切られた)、次のようなものが必要です。
for dev in $(diskutil list); do
diskutil info "$dev"
done
探す
find ~/ -type f \( -name '*mp3' -or -name '*mp4' \)
表示されるメタ文字を引用する必要がありますfind
。