2017-01-20 8 views
-1

현재 디렉토리의 전체 크기를 찾으려고하는데 쉘 스크립트가 expr 명령에서 실패했습니다. 아래 코드는 내 코드입니다.유닉스 쉘 스크립팅 - expr 구문 문제

#!/bin/sh 
echo "This program summarizes the space size of current directory" 

sum=0 

for filename in *.sh 
do 
    fsize=`du -b $filename` 
    echo "file name is: $filename Size is:$fsize" 
    sum=`expr $sum + $fsize`   
done 
echo "Total space of the directory is $sum" 
+0

내가 "expr : 구문 오류"던졌습니다 실행할 때. – Ravi

+0

'du -cb * .sh'만으로도 같은 결과를 얻을 수 있습니다. 그 밖의 무엇을 성취하려고합니까? – fukanchik

답변

0

du는 크기와 파일 이름을 반환합니다. 단지 전체 크기를 원할뿐입니다.

find . -maxdepth 1 -type f | xargs du -bS | awk '{s+=$1} END {print s}' 

뒤 디렉토리에서 사용하는 실제 공간을 제공, 그래서 내가 사용했던 것 "찾기 : 당신의 FSIZE 할당 변경

fsize=$(du -b $filename | awk '{print $1}') 

디렉토리 내용의 전체 크기를 제외한 하위 디렉토리 및 디렉토리 자체를보십시오 "실제로는 파일 만 일치시키고 awk는 크기를 추가합니다.

+0

감사합니다. 내 문제가 해결되었습니다. – Ravi

+0

성명서에 관한 질문 "du -b --summarize -S | awk '(print $ 1)'" – Ravi

+1

질문. 아래는 ls -l -a의 출력입니다. 4096 1 월 22 일 22:06. 4096 일월 26 22시 6분 .. 346 일월 20 1시 26분 BreakContinue.sh 805 일월 17 1시 23분 DirectorySize.sh 597 일월 19 2시 22분 Example1.sh 1,245 일월 13 1시 54분 fileprocess.sh 325 일월 12 23시 31분 first1.sh 477 일월 14 2시 29분 LineCount.sh 27 일월 20 2시 44분 446 일월 16 20시 56분 PatternMatch.sh 719 일월 18 1시 54분 RetireAge.sh Outfile.txt 409 Jan 21 02:01 SizeSum1.sh 420 1 월 22 일 22:06 SizeSum.sh 142 1 월 13 일 21:04 sum.sh [edureka @ localhost 스크립트] $ du -b --summarize -S . 출력은 "5958"이어야합니다. 왜 그것이 10054입니까? – Ravi

1

시도 du -b somefile. 그것은 다음과 같은 크기와 이름을 인쇄합니다 :

263  test.sh 

은 그럼 당신은 산술적으로 작동하지 않습니다 sum에 모두 크기와 이름을 추가하기 위해 노력하고 있습니다.

당신은 더 나은 파일 이름을 멀리 슬라이스하거나 하나 필요 stat 대신 du 사용

fsize=`stat -c "%s" $filename` 

... 그리고 bash 위해를 here을 설명하는 수학을 할 클리너 방법은 비트를가한다 :

sum=$(($sum + $fsize)) 

출력 :

This program summarizes the space size of current directory 
file name is: t.sh Size is:270 
Total space of the directory is 270 
+0

고맙습니다. 내 문제가 해결되었습니다. – Ravi