2014-01-08 3 views
0

여유 공간이 MB이고 파일 크기가 다른 단위로있을 때 파일 및 디렉토리 크기로 산술 연산을 수행하는 방법 GB쉘 스크립팅에서 파일 및 디렉토리의 크기로 산술 연산을 수행하는 방법

하나의 준비 명령으로 "/ home/abc/def"디렉토리의 크기를 MB 단위로 가져올 수 있습니다. 그 30GB 그래서 KB에 들어가는 것은 좋은 생각이 아니다.

mount   fssizeMB 
=====   ======= 
/home/abc/def 30002  

[email protected]:/home/abc/def> ls -lrth 
total 7.0G 
drwxrwxrwx 3 root root 114 Oct 29 2012 file1 
drwxr-xr-x 3 root root 103 Nov 22 2012 file2 
-rw-r--r-- 1 root root 114 Jan 25 2013 file3 
-rw-r--r-- 1 mtc users 3.8G Jul 22 03:02 file4 <------------------- concerned file 
-rw-r--r-- 1 mtc users 3.2G Jul 24 22:26 file5 
-rw-r--r-- 1 root root  0 Jan 5 20:30 file6 

어떻게 스크립트 로직 이하로 설정합니다 :

file4의 두 배 파일 크기의 < 여유 공간이 "/ 홈/ABC/DEF"다음 성공 또는 다른 실패를 에코.

답변

1

stat 또는 du -Sh을 사용하여 파일 크기를 얻을 수 있습니다 (스크립트에 ls을 사용하지 마십시오). , -le (배시를 사용하는 경우 또는 [[) 당신이 -ge와 (-gt, -lt을 비교하기 위해 test 또는 [ 명령을 사용할 수 있습니다, 그리고

for i in <direcory>/*; do ...; done 

:

그리고

폴더의 파일을 검색하기 옵션을 산술 연산자로 사용).

자세한 내용은 각 명령의 맨 페이지를 참조하십시오.

1

이것은 백분율로 작동합니다. 단지 아이디어를 제공하기 위해 MB 또는 GB 등으로 처리하도록 수정할 수 있습니다.

내 충고 : bash에서 산술 연산을하는 것은 그리 좋은 생각이 아니므로 float 또는 str과 같은 특수 변수 데이터 유형을 처리하는 프로그래밍 언어로 작업해야합니다. bash는 더 간단하고 산술 연산에서는 잘 작동하지 않습니다. 그것은 당신의 + 및 - 않습니다,하지만 그것이 오면 백분율과 수레에 관해서 ... 잘. python이나 perl을 시도하거나 다른 것을 연구 해보십시오. 확실히 위의 제안, 사용 -SH

#!/usr/bin/env bash 
#take df -h and iterate trough percentages 
#check to see if file system is full more than 80 % 
perc="$(df -h | awk '{print $5}'| sed -e 's/[%/ a-z/A-Z].*//g')" 

#echo $perc 

for p in $perc 
do 
    if [ $p -gt 30 ] #change 30 to whatever 
     then 
     df -h | grep $p 
     echo -e "$p Exceeded on `hostname`" 
    fi 
done 
1

대부분의 명령은 특정 장치를 사용하여 크기를 표시하는 옵션이 뒤.

lsdf의 플래그는 "사람이 읽을 수있는"형식을 산출해야하며, 이는 일관성없는 단위가 될 수 있으므로 산술 계산에 적합하지 않습니다.

파일 크기를 얻으려면 stat 또는 심지어 wc -c을 사용하십시오. ls -l의 출력을 파싱하는 것은 좋지 않으므로 사용하지 마십시오.

파일 크기를 일관되게 킬로바이트 단위로 늘릴 수 있고 여유 공간 크기를 일관되게 바이트 단위로 얻을 수 있으면 문제가없는 바이트 수를 1024로 곱하면 일관된 단위로 비교할 수 있습니다 .

사용할 특정 명령 및 플래그는 운영 체제 및 설치된 소프트웨어에 따라 다릅니다.

+0

wc -c 정확한 크기를 KB로 적어주세요, Thanks !! 어떤 방식 으로든 디렉토리 전체 크기를 KB로 얻을 수 있습니까? –

+0

'wc -c'는 정확한 크기를 * bytes *로 지정해야합니다. 보통'du -sk'를 사용하여 디렉토리 전체 크기를 KB 단위로 얻을 수 있습니다. – janos

+0

1.du -sk는 전체 크기가 아닌 자유 크기를 제공합니다. (오해하는 경우 올바르게 수정하십시오.) 2. 나는 arithmatic 연산을 수행하기 위해 파일 크기와 디렉토리의 전체 크기를 같은 단위로 유지하려고합니다. –

관련 문제