web-dev-qa-db-ja.com

100Gを超えるディスクサイズを検出するこのフィルターを短くできますか?

私の目標は、lsblkから100Gを超えるディスクを取得することです。

私はそれを動かしていますが、それは扱いにくいです。短縮できると確信しています。 lsblkとはまったく異なるものを使用するか、人間が読み取れる数値をawkで直接フィルタリングすることができます。

これが私がまとめたものです:

lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}'

100Gを超えるディスクのsdxおよびnvmexxx部分のみを出力します。まさに私が必要とするもの。

私はそれに満足していますが、Gurusからもっと学びたいと思っています????

12
chalybeum

lsblkから必要な出力の形式を指定できます。

% lsblk -nblo NAME,SIZE
mmcblk0   15931539456
mmcblk0p1   268435456
mmcblk0p2 15662038528

使用するオプション

-b, --bytes
      Print the SIZE column in bytes rather than in human-readable format.

-l, --list
      Use the list output format.

-n, --noheadings
      Do not print a header line.

-o, --output list
      Specify which output columns to print.  Use --help to get a list of  all  supported
      columns.

次に、フィルタリングが簡単になります。

% lsblk -nblo NAME,SIZE | awk '$2 > 4*2^30 {print $1}' # greater than 4 GiB
mmcblk0
mmcblk0p2

あなたの場合、それは100*2^30 100GiBまたは100e9/1e11 100 GBの場合。

28
muru

また、lsblkにJSON形式で出力し、jqを使用してフィルタリングするように指示することもできます。

$ lsblk -Jb | jq -r '..|select(.size? >= 1e11).name'
sda
sda2

または:

$ lsblk -Jb | jq -r '..|select(.type? == "disk" and .size? >= 1e11).name'
sda

タイプdiskのエントリに制限します。

1e11は100 GBです。100GiBの場合は107374182400(または100*1024*1024*1024)で置き換えます。丸めのため、-bなしのlsblk自体はサイズが100Gと報告されます約99.9278〜100.0488の範囲GiB(何らかの理由で))

lsblk -OJbを使用すると、lsblkはすべての利用可能な情報を報告します。これにより、よりきめの細かい選択を行ったり、より多くの関連情報を出力したりできます。

/sysから直接情報を取得することもできます。 zshの場合:

$ printf '%s\n' /sys/class/block/*(e'[(($(<$REPLY/size) * 512 >= 1e11))]':t)
sda
sda2
18

試す

lsblk| awk '$4 ~ /G$/ && $4+0 > 100 {print $1}'

これにより、grepとフィルタリングが同時に行われます。

  • $4 ~ /G$/サイズをGで提出
  • $4+0 > 100 100Gを超えるサイズを取得
  • {print $1} 名前を印刷する

原則として、grepawkを同じパイプで使用する必要はありません。

ディスクのみ(パーティションなし)を取得する場合:awkフィルタリング

lsblk| awk '$4 ~ /G$/ && $4+0 > 100 && $6 == "disk"  {print $1}'

どこ

  • $6 == "disk"ディスクのある列のみを選択

ディスクのみ(パーティションなし)を取得するには:lsblk Filtering

lsblk --nodeps| awk '$4 ~ /G$/ && $4+0 > 100 {print $1}'

どこ

  • --nodeps:-d、--nodepsはスレーブまたはホルダーを出力しません
6
Archemar