df에서 사용 및 사용 가능한 크기에 대해서만 변수를 생성하는 방법은 무엇입니까?

df에서 사용 및 사용 가능한 크기에 대해서만 변수를 생성하는 방법은 무엇입니까?

df를 사용할 때 크기와 사용 가능한 변수에 각각 해당하는 변수를 만들고 싶다고 가정해 보겠습니다. 각 변수에 대한 변수를 만드는 방법은 무엇입니까? 그 중 하나만 반환하는 옵션이 있나요?

directorySize=

directoryUsed=

directoryAvailable=

내 홈 디렉터리를 기반으로 이러한 변수를 만들고 싶다고 가정해 보겠습니다. 어떻게 해야 합니까?

답변1

어떤 선택도 하나의 필드만 반환하지 않습니다. 그러나 이 옵션을 사용하면 -P모든 필드가 동일한 줄에 인쇄됩니다(이 옵션을 사용하지 않으면 첫 번째 열이 너무 넓은 경우 다른 필드가 다음 줄로 이동됩니다). 그런 다음 awk를 사용하여 두 번째 줄에서 원하는 열을 인쇄할 수 있습니다.

size=$(df -Pk ~ | awk 'NR==2 {print $2}')  # in kB

모든 변수를 한 번에 설정하려면 awk에서 쉘 조각을 인쇄하도록 할 수 있습니다.

eval "$(df -Pk ~ | awk 'NR==2 {printf "size=%d used=%d available=%d", $2, $3, $4}')"

일부 외국 시스템에서는 파일 시스템 레이블에 공백을 허용하므로 df출력을 안정적으로 구문 분석하는 것이 불가능합니다. 불행히도 다른 이식 가능한 방법은 없습니다.

Linux에서만 이 stat명령을 사용할 수 있습니다. 블록을 사용하여 크기를 표현하는 것은 다소 어색합니다.

block_size=$(stat -f -c %S ~)
total_blocks=$(stat -f -c %b ~)
free_blocks=$(stat -f -c %f ~)
size=$((block_size * total_blocks)) # in bytes
available=$((block_size * free_blocks))
used=$((size - available))

관련 정보