私の目標は、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からもっと学びたいと思っています????
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の場合。
また、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
試す
lsblk| awk '$4 ~ /G$/ && $4+0 > 100 {print $1}'
これにより、grepとフィルタリングが同時に行われます。
$4 ~ /G$/
サイズをGで提出$4+0 > 100
100Gを超えるサイズを取得{print $1}
名前を印刷する原則として、grep
とawk
を同じパイプで使用する必要はありません。
ディスクのみ(パーティションなし)を取得する場合: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はスレーブまたはホルダーを出力しません