Bash variabele oude waarde buiten loop

Pagina: 1
Acties:

  • Andre-85
  • Registratie: April 2003
  • Niet online
Ik ben bezig met het schrijven van een scriptje om alle thumbs.db bestanden op een fileserver te verwijderen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
location=$1
echo $location

i=0
size=0
find $location -iname 'thumbs.db'|
while read line;
do
  filesize=$(stat -c%s "$line") #filesize in bytes
  size=$(($filesize+$size)) #optellen voor totaal
  #rm $line
  echo $size
  (( i++ ))
  echo $i
done

echo "Er zijn $i thumbs.db bestanden verwijderd. Dit heeft $size bytes vrije ruimte opgeleverd"
exit

Ik wil weergeven hoeveel bestanden er verwijdert zijn en hoeveel bytes dat heeft opgeleverd, gewoon ter informatie dat ik kan zien wat er gebeurd is. Leek me vrij simpel, gewoon een tellertje en telkens de filesize bijelkaar optellen en dan weergeven. Dat lukt me alleen niet. In de loop echo ik $i en $size dat geeft gewoon het verwachte resultaat echter, wil ik dit daarna aan het eind van het programma weergeven is $i en $size 0 :?

Ik schaam me bijna dat ik voor zo iets simpels hier een topic moet openen maar via google, de search hier en de BASH Programming - Introduction HOW-TO kom ik niet verder.
Wel een topic met vergelijkbaar probleem gevonden maar geen oplossing [bash] variabele verliest waarde buiten loop?!

Wie biedt de oplossing...

Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup


Verwijderd

De reden dat de waarden weer op nul komen te staan is omdat je een pipe gebruikt in je script. While wordt in dit geval als een apart proces op gestart, dus als je loop klaar is verlies je de output er van, zo ook in je variabel.

Een oplossing zou zijn om in plaats van while for te gebruiken:
code:
1
for line in `find $location -iname 'thumbs.db'`


Dan ben je van de pipe af en krijg je wel de gewenste output.