[FRAGE] Dateinamen normalisieren während sie in einer "for" Schleife sind

Hobbystern

Hobbystern

Wahl-Debianer
Moin Gemeinde,

ich habe ein Skript welches Emails abholt und weiterverarbeitet, manche müssen ausgedruckt werden.

Nun hat sich herausgestellt das mein Kommando "lpr" nur normalisierte Dateien verarbeiten kann, ein Dateiname :

23.01.2014.Druckdatei.so.benennt.man-ja-auch-keine-dateien.pdf

wird schlichtweg asl "Datei nicht gefunden" ignoriert.

Ich habe den Weg gewählt solche Dateinamen (welche ja aus der Email entpackt werden) innerhalb der for-Schleife zu "renamen" - aber da gibt es das gleiche Problem, rename findet solche seltsamen Dateinamen dann manchmal auch einfach nicht.

Gibt es eine gute Lösung wie sowas ablaufen kann?

Liebe Grüße,

Stefan
 
Setze vor Leerzeichen und Sonderzeichen ein Backslash (\) oder packe den Dateinamen in einfache Anführungszeichen (').
 
Wir der Effekt auch in einer "for" Schleife wirken?
 
Eine for-Schleife macht nichts anderes als die Befehle in der Schleife mehrfach aufzurufen, eben für jeden Durchlauf ein Mal. Insofern sollte das natürlich auch in einer Schleife funktionieren. Da du aber ja vermutlich Variablen als Dateinamen verwendest, musst du dafür sorgen, dass die einfachen Anführungszeichen nicht die Auswertung der Variablen verhindern. Es kann also sein, dass du \' verwenden musst anstelle eines einfachen '. Da ich selten Bash und zumeist eher Perl verwende, müsste ich das allerdings auch erst testen. Daher... Versuch macht klug. ;)
 
Ich sehe, Du verstehst was ich meine - ich habe aktuell nur bedingt Zugriff auf die "schwierigen" Eingangsmails und kann das hier nur bedingt reproduzieren, es ist auch nicht mehr in der Größenordnung von "mal eben"....grundsätzlich ist Dein Denkansatz aber richtungsweisend, das heißt für mich 3 Schritte zurück - aber dann schneller zum Ziel.

Ich sage an dieser Stelle Danke und werde das Ganze in Ruhe heute Abend durchgehen - Feedback Ehrensache. (Danke!)
 
Ein Linux oder Unix sollte mit dem Dateinamen, den Du angegeben hast, keine Probleme haben, ein Punkt ist kein Sonderzeichen. Handelt es sich wirklich um dieses Schema? Wenn Du Umlaute in den Namen hast, kann es auch sein, dass Du die 'locale' anpassen musst.
 
Eine for-Schleife taugt nicht für "schwierige" Dateinamen (es sei denn, man will unbedingt ein prinf %q da rein quetschen). Richtig angewendet, verarbeitet eine while-read-Schleife auch die übelsten Zeichen problemlos. Stichwort: Nullbyte als Trennzeichen.
 
@tgruene: - Ich habe aktuell nur Dateinamen mit vielen Punkten (nur ein Depp benennt Dateien so!) aber wer weiß - vielleicht ist es nächste Woche noch besser und jemand schreibt Tausendfüüüüßßßler als Dateiname ?! ;)
@Spröde - mit read while habe ich mal mit csv dateien gearbeitet, ich werde das mal ebenfalls in den Kochtopf werfen, aber ..

Vielleicht gehe ich auch von vornherein einen ganz anderen Weg und normalisiere die Dateinamen direkt nach dem Eintreffen und entpacken der Email, so dass ich die for schleife gar nicht erst erreiche - uudeview nehme ich zum entpacken der Mails - da ist leider seit 2004 "no need to add new features" - sont hätte man ggf. direkt in uudeview eine option verbauen können die solche "kaputten" Dateinamen gar nicht erst weiterbearbeitet, 8 Zeichen und us-zeichensatz wären cool.....heute Abend kommt Rat, denn dann kommt Zeit :-)

Danke Euch Allen erst einmal....

Um das warum mal anzusprechen, ich verarbeite Bestellungen von vielen verschiedenen Bestellungen, dabei erhalte ich Emails in welchen eine Bestelldatei liegen muss, eine pdf - diese entpackt das skript, liest "fremddateien" heraus und filtert noch etwas nach potenziellen texten oder wichtigen dokumenten die da nicht hingehören, danach ziehe ich das pdf mit ghostscript einmal auf ocr-lesbarkeit auf und lese es mit gocr zu text um, kommt da nichts sauberes bei raus druckt er die pdf datei (und genau da werden die dateinamen erst schwierig) DIe Ergebnisse von gocr mit 600dpi sind nicht schlecht.....aber noch nicht perfekt und stabil.

So druckt das Skript die meisten Bestellungen noch sicherheitshalber aus, aber manche können schon direkt maschinell verarbeitet werden....schade das man Kunden nicht zwingen kann eine ordentliche PDF Routine zu nehmen, oder noch viel besser - direkt in eine schnittstelle zu senden...aber das ist leider bei vielen verschiedenen nicht so einfach..

Grüsse an dieser Stelle!
 
So, die Lösung die ich hier eingestellt habe ist grundlegender. Ich habe eine Schleife gesetzt die alle eingehenden Dateien erst einmal grundsätzlich normalisiert, so ist auch das Problem von übermorgen hoffentlich schon gebannt.

Ich habe das Ganze mit "rename" gemacht...

Danke für Eure Hilfe soweit, ich würde das hier erneut öffnen wenn es nicht ausreicht...! Guten Start in die Woche!
 
Nochmals kurze Rückmeldung - das Kind funktioniert, für die Nachwelt :

Immer schön auf die ' " ' rund um die Variablen achten, es macht einen Unterschied ob im String heute "arbeit" steht oder morgen "ängstlichezuständeheißensonderzeichen" - wenn das dann ${STRING} ist, kommt mein Skript aus dem Tritt - ist es jedoch "${STRING}" - ist alles gut.

Ich gehe aktuell hin, rename alle Sonderzeichen aus Dateinamen und verarbeite erst dann, gleichzeitig passe ich auf ' " ' auf...

Danke an die Helfer hier!
 
Zurück
Oben