In For-Schleife nach Dateiinhalt Filtern
Guten Tag,
ich habe ein Shellscript, welches Dateien, die max. 30 Tage alt sind, aus einem definierten Verzeichnis ausliest, deren Inhalt parst und anschließend als XML in eine PHP Datei einbettet und auf einen FTP Server lädt. Nun habe ich das Problem, dass in diesen Dateien hardwarebedingt vereinzelt vermurkste Zeichen auftauchen, die später vom Webserver beim Zerlegen der XML Daten nicht gelesen werden können. An der Ursache kann man leider nichts ändern und fehlerhafte Inhalte sollen gar nicht erst zum Server gelangen. Ich möchte nun also fehlerhafte Dateien einfach in der for-Schleife ignorieren.
Wie kann man die "in" Bedingung so erweitern, dass alle Dateien, die auch Zeichen außerhalb des ASCII Zeichensatzes (Buchstaben, Ziffern, Sonderzeichen, Zeilenumbrüche) enthalten, rausfallen?
Bei einem Durchlauf werden rund 30 Dateien verarbeitet und das Script wird alle 1-2 Minuten ausgeführt.
Sinnvoll gekürzte Version des Scripts:
ich habe ein Shellscript, welches Dateien, die max. 30 Tage alt sind, aus einem definierten Verzeichnis ausliest, deren Inhalt parst und anschließend als XML in eine PHP Datei einbettet und auf einen FTP Server lädt. Nun habe ich das Problem, dass in diesen Dateien hardwarebedingt vereinzelt vermurkste Zeichen auftauchen, die später vom Webserver beim Zerlegen der XML Daten nicht gelesen werden können. An der Ursache kann man leider nichts ändern und fehlerhafte Inhalte sollen gar nicht erst zum Server gelangen. Ich möchte nun also fehlerhafte Dateien einfach in der for-Schleife ignorieren.
Wie kann man die "in" Bedingung so erweitern, dass alle Dateien, die auch Zeichen außerhalb des ASCII Zeichensatzes (Buchstaben, Ziffern, Sonderzeichen, Zeilenumbrüche) enthalten, rausfallen?
Bei einem Durchlauf werden rund 30 Dateien verarbeitet und das Script wird alle 1-2 Minuten ausgeführt.
Sinnvoll gekürzte Version des Scripts:
#!/bin/bash
UPDIR="/tmp"
XMLFILENAME=test.php
ANZAHL=0
ZEITSPANNETAG=30
erstelle_xml() {
for FILE in $( find $DIR -mtime -$ZEITSPANNETAG ); do
ANZAHL=$((ANZAHL+1))
echo "<message>" >> $UPDIR/$XMLFILENAME
echo "<date>" >> $UPDIR/$XMLFILENAME
grep Datum: $FILE | sed 's/Datum://g' | sed 's/^ \+//g' >> $UPDIR/$XMLFILENAME
echo "</message>" >> $UPDIR/$XMLFILENAME
done
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 230491
Url: https://administrator.de/forum/in-for-schleife-nach-dateiinhalt-filtern-230491.html
Ausgedruckt am: 14.05.2025 um 22:05 Uhr
5 Kommentare
Neuester Kommentar