일정 비율의 디스크 크기를 계산하는 셸 명령


0

나는 사용자의 홈 디렉토리의 전체 디스크 크기의 15 %를 계산하는 쉘 스크립트를 작성 중이다. 나는이 일을하는 더 좋은 방법이 있다면 나에게 (다소) 내가 원하는 것을 얻지 만 확실하지 않은 명령을 가지고있다.

df -hT /home/user1 | grep -vE '^Filesystem' | awk '{ print $2 }'

이 명령은 다음을 출력합니다.

<blank line>

516G

이 명령이 올바른 방법 일 경우 516을 추출하는 방법은 제 질문입니다.

shell 

답변:


1

이 작업을 수행하는 또 다른 방법 awk grep없이 :

df -hT /home/user | awk '$1 ~ "sda1"{gsub(/[A-Z]/,"",$4); print $4}'

awk 블록의 앞면 테스트 $1~"sda1" 주요 하드 드라이브가 그 중 하나임을 확인하는 것입니다. df 찾고있다. 이것은 잡는 것보다 훨씬 안전합니다. df 포함하지 않은 레코드 filesystem 다른 드라이브를 상자에 넣거나 일부 NFS 드라이브를 마운트하는 경우 주 드라이브보다 더 많은 것을 낼 수 있습니다.

gsub(/[A-Z]/, "", $4) 에있는 대문자를 바꿉니다. $4 (드라이브 크기) 없음 "". 디스크 크기 접미사 (K, M, G 등)는 모두 대문자이므로 믿을만합니다. 완료 후에는 새롭고 향상된 $4.


1
  • 용도 $2+0 에서 번호를 만들려면 awk.
  • 너는 필요 없어. grep 검색을 수행 할 수 있기 때문에 awk 그 자체.

당신이 사용할 수있는:

df -hT / |  awk '/^Filesystem/{ print ($2+0) * 15/100 }'

1

대신 'G'를 제거하려고 시도하는 대신 블록 크기를 지정하는 것이 좋습니다. 이렇게하면 반환 된 것과 같은 복잡한 문제를 처리 할 필요가 없습니다. 또는 케이 :

df -BG /home/user1 | awk 'NR==2 { print $3 * 0.15 }'

아마도 -B1을 사용하는 것이 더 좋을 것입니다. 그런 다음 수동으로 인쇄 가능한 버전을 수동으로 수행하십시오.

df -B1 /home/user1 | awk 'NR==2 { split("K M G T P E", s); for(n=int($3*0.15); n>1024; n=rshift(n,10)) i++; print n s[i] }'

위의 내용은 (GNU coreutils) 8.12와 8.25 버전의 df.

그만큼 df 출력은 주어진 디렉토리가 사용하는 파티션에 대한 정보를 제공합니다 ... 각 사용자가 자신의 파티션으로 축복을 받으면 잘 작동합니다. 그러나 대규모 조직의 경우 특히 quota 사용자 디렉토리에 사용 중입니다. 문의하십시오. man 페이지 quota (그리고 친구들).


고마워요 마이클,이 일은 저에게 효과적이었습니다. df -BG / home / user1 | awk 'NR == 3 {인쇄 $ 1 * 0.15}'

@Manth - 어떻게 NR == 3로 끝났습니까? 어쩌면 내가 내 대답을 향상시킬 수 있는지 알아봐야 할까? 내가 NR == 2를 사용한 이유는 제 경우에 헤더가 1 행에 있고 다음 행이 출력입니다 ... 2 행에 메시지가 표시됩니까? 또한 $ 1이 당신에게 어떻게 작용 했습니까? suse와 우분투에서 각각 "df (GNU coreutils) 8.12"와 "df (GNU coreutils) 8.25"를 사용하고 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.