내 목표는 lsblk에서 100G보다 큰 디스크를 얻는 것입니다.
작동하지만 어색합니다. 나는 그것이 단축 될 수 있다고 확신합니다. lsblk와 완전히 다른 것을 사용하거나 awk를 사용하여 사람이 읽을 수있는 숫자를 직접 필터링 할 수 있습니다.
다음은 제가 정리 한 것입니다.
lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}'
100G보다 큰 디스크의 sdx 및 nvmexxx 부분 만 출력합니다. 정확히 내가 필요한 것.
나는 그것에 만족하지만, 당신에게서 더 많은 것을 배우고 싶어합니다.
답변
원하는 출력 형식을 지정할 수 있습니다 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
100GB입니다.
답변
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
.
( 100GB 임. 100GiB로 (또는 )로 1e11
교체하십시오 . 반올림으로 인해 약 99.9278에서 100.0488GiB 범위의 크기에 대해 100G 가없는 자체 보고 (어떤 이유로))107374182400
100*1024*1024*1024
lsblk
-b
로 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 필터링
lsblk --nodeps| awk '$4 ~ /G$/ && $4+0 > 100 {print $1}'
어디
--nodeps
: -d, –nodeps는 슬레이브 또는 홀더를 인쇄하지 않습니다