2017-01-20 23 views
-1

現在のディレクトリの合計サイズを調べようとしていて、シェルスクリプトがexprコマンドで失敗しています。以下は私のコードです:Unixシェルスクリプト - 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:syntax error"がスローされます。 – Ravi

+0

'du -cb * .sh'だけで同じことができます。あなたは他に何を達成しようとしていますか? – fukanchik

答えて

0

duは、サイズとファイル名を返します。合計サイズが必要です。 サブディレクトリとディレクトリ自体を除いたディレクトリの内容、あなたのFSIZE割り当て

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

合計サイズ変更してみてください:

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

デュ・ディレクトリが使用する実際のスペースを与えるので、私は見つける」を使用していました"実際にはファイルにマッチするだけで、awkではサイズを追加することができます。

+0

ありがとうございます。私の問題は解決されました。 – Ravi

+0

あなたのステートメントの質問 "du -b --summarize -S | awk '(print $ 1)'" – Ravi

+1

質問。以下はls -l -aの出力です。 4096 1月22 22:06 4096 1月26日午後10時06分.. 346 1月20日午前1時26 BreakContinue.sh 805 1月17日1時23分DirectorySize.sh 597 1月19日午前2時22分Example1.sh 1245年1月13日午前1時54 fileprocess.sh 325 1月12日夜11時31分first1.sh 477 1月14日午前2時29分LineCount.sh 27 1月20日午前2時44 446 1月16日午前20時56分PatternMatch.sh 719 1月18日1時54分RetireAge.sh Outfile.txtを409 Jan 21 02:01 SizeSum1.sh 420 1月22日22:06 SizeSum.sh 142 1月21:04 sum.sh [edureka @ localhostスクリプト] $ du -b --summarize -S 。出力は「5958」であったはずです。なぜ10054ですか? – Ravi

1

Try du -b somefileそれはこのようにサイズと名前を印刷します:

263  test.sh 

は、その後、あなたは算術的に動作することはありません sumに両方のサイズと名前を追加しようとしています。

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

...とbashためhereに記載されている計算を行うためのビットクリーンな方法があります:あなたは、ファイル名を離れスライスまたは、より良い、代わりにdustatを使用するか必要

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