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
}
Please also mark the comments that contributed to the solution of the article
Content-Key: 230491
Url: https://administrator.de/contentid/230491
Printed on: April 23, 2024 at 11:04 o'clock
5 Comments
Latest comment