Re: while done und ein Counter
Am 08.06.2016 um 16:35 schrieb Joachim Hartmann:
> Hallo,
> das nachstehende Skript soll Dateien - unter einem anderen Namen -
> speichern so sie noch nicht vorhanden sind. Das klappt auch
> hervorragend. Es soll aber auch noch die Anzahl der kopierten Dateien
> ermittelt werden. Ist die Anzahl Null endet das Skript, anderenfalls
> soll ein weiterer - hier nicht aufgeführter - Teil ausgeführt werden.
> Leider funktioniert das Zählen nicht wie gewünscht:
>
> ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
> #!/bin/bash
> ###########################################################################
>
> # Skript zum Kopieren der Tracks vom Server auf den Web-Server
> ###########################################################################
>
>
> # Deklaration von Konstanten
> Q_Pfad="/home/quelle"
> Z_Pfad="/var/ziel"
> Anzahl=0
>
> # In der Quellpfad wechseln da sonst Problem mit find bestehen
> cd "$Q_Pfad"
>
> # Liste der GPX-Dateien erstellen und und abarbeiten
> find -type f -name '????-??-??*.gpx' | while read Q_Datei; do
> # prüfen ob Datei schon vorhanden
> if [ ! -f "$Z_Datei" ]; then
> .
> .
> .
> #################################################
> echo "1 Zwischensumme vor dem kopieren: $Anzahl"
> #################################################
> cp -u "$Q_Datei" "$Z_Datei"
> Anzahl=$[Anzahl + 1]
> #################################################
> echo "2 Zwischensumme nach dem kopieren: $Anzahl"
> echo ""
> #################################################
> fi
> done
> #################################################
> echo "3 Anzahl der kopieren Dateien: $Anzahl"
> #################################################
> ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
>
> Der Aufruf des Skriptes erzeugt folgende Ausgabe:
>
> ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
> root@10:23:57# /etc/cron.daily/gpxcopy
> 1 Zwischensumme vor dem kopieren: 0
> 2 Zwischensumme nach dem kopieren: 1
>
> 1 Zwischensumme vor dem kopieren: 1
> 2 Zwischensumme nach dem kopieren: 2
>
> 3 Anzahl der kopieren Dateien: 0
> root@10:24:00#
> ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
>
> Mir ist unklar warum das korrekte Zählwerbgis die Schleife nicht
> "verlässt"!
> Wer weiss Rat, Google jedenfalls nicht! Oder ich stelle die Frage falsch.
Der Grund wurde bereits genannt. Ich löse das immer so:
(ist auch in dem bereits genannten Link zu finden, Stichwort Process
Substitution)
anzahl=0
while read f;
do
echo $f
((anzahl++))
done < <(find . -type f -name '????-??-??*.gpx')
echo $anzahl
Gruss Wolfgang
Reply to: