[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: