2017-01-20 1 views
-1

J'essaie de trouver la taille totale d'un répertoire courant et le script shell échoue à la commande expr. ci-dessous est mon code:Unix Shell Scripting - problème de syntaxe 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

quand je l'exécute lance "expr: erreur de syntaxe". – Ravi

+0

Vous pouvez faire la même chose en n'utilisant que 'du -cb * .sh'. Quoi d'autre essayez-vous d'accomplir? – fukanchik

Répondre

0

du retourne la taille et le nom de fichier, vous voulez juste la taille totale. Essayez de changer l'affectation fsize

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

Taille totale du contenu du répertoire, à l'exclusion des sous-répertoires et le répertoire lui-même:

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

du donnera l'espace réel utilisé par un répertoire, donc je devais utiliser « trouver "pour vraiment correspondre seulement aux fichiers, et awk pour ajouter les tailles.

+0

Merci. Mon problème est résolu. – Ravi

+0

Question sur votre relevé "du -b --summarize -S | awk '{print $ 1}'" – Ravi

+1

Question. Ci-dessous la sortie de ls -l -a: 4096 Jan 26 22:06. 4096 26 janvier 22:06 .. 346 20 janvier 01:26 BreakContinue.sh 805 17 janvier 01:23 DirectorySize.sh 597 19 janvier 1245 02:22 Example1.sh 13 janvier 01:54 fileprocess.sh 325 12 janvier 23:31 first1.sh 477 14 janvier 02:29 LineCount.sh 27 janvier 20 02:44 outfile.txt 446 16 janvier 20:56 PatternMatch.sh 719 18 janvier 01:54 RetireAge.sh 409 21 janvier 02h01 SizeSum1.sh 420 26 janvier 22h06 SizeSum.sh 142 13 janvier 21h04 sum.sh [edureka @ localhost Scripts] $ du -b --summarize -S . la sortie aurait dû être "5958". pourquoi c'est 10054? – Ravi

1

Essayez du -b somefile. Il imprimera la taille et le nom comme celui-ci:

263  test.sh 

Ensuite, vous essayez d'ajouter à la fois la taille et le nom arithmétiquement à sum qui ne fonctionnera jamais.

Vous devez soit couper loin le nom du fichier ou, mieux, utiliser stat au lieu de du:

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

... et pour bash il est un peu plus propre façon de faire le calcul qui est décrit here :

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

sortie:

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

Merci. Mon problème est résolu. – Ravi