100G보다 큰 디스크를 찾는 이 필터를 단축할 수 있습니까?

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 부분만 출력합니다. 나에게 딱 필요한 것.

기쁘지만 스승님에게서 더 많은 것을 배우고 싶습니다.

답변1

출력이 다음과 같이 표시되는 방식을 지정할 수 있습니다 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/ 100GB 입니다 1e11.

답변2

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(100GB의 경우 . 100GiB를 (또는107374182400100*1024*1024*1024lsblk-b

lsblk -OJb, 를 사용 lsblk하면 사용 가능한 모든 정보를 보고할 수 있으므로 더 세부적인 선택을 하거나 더 관련성이 높은 정보를 출력할 수 있습니다.

에서 직접 정보를 얻을 수도 있습니다 /sys. 그리고 zsh:

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

답변3

노력하다

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

그러면 grep과 필터링이 동시에 수행됩니다.

  • $4 ~ /G$/G 크기의 파일 가져오기
  • $4+0 > 100검색 크기가 100G를 초과합니다.
  • {print $1}이름을 새기다

일반적으로 동일한 파이프에서 및 를 사용할 필요가 없습니다 grep.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는 슬레이브나 홀더를 인쇄하지 않습니다.

관련 정보