Page 1 of 2

dos2unix

PostPosted: 17.04.2012, 20:30
by Spider-Mann
Bei der Änderung von Version 7.3 auf Version 7.3.1 ist bei den drei Zeilen 574-575-576 mit denen die Dateien ins Linunx-Format convertiert werden scheinbar etwas schief gegangen.

- tofrodos, daß evtl. unter Debian als dos2unix benutzt wird, hat keine Option '-q', es sollte also wirklich nur dos2unix benutzt werden dürfen.
- die find-Option '-exec' muß mit einem ';' enden, daß maskiert werden muß, damit es keine Verknüpfung zweier Zeilen wird
- das '+' verstehe ich nicht

Ich habe die Zeilen folgendermaßen geändert:

Code: Select all
#find ../exclude/ -type f -exec dos2unix -q "{}" + || echo find has a problem with exlude
find ../exclude/ -type f -exec dos2unix -q {} \; || echo find has a problem with exlude
   
#find ../xslt/ -type f -exec dos2unix -q "{}" + || echo find has a problem with xslt
find ../xslt/ -type f -exec dos2unix -q {} \; || echo find has a problem with xslt
   
#find ../static/ -type f -exec dos2unix -q "{}" + || echo find has a problem with static
find ../static/ -type f -exec dos2unix -q {} \; || echo find has a problem with static

und es gab keine Fehler.

MfG
Spider-Mann

Re: dos2unix

PostPosted: 18.04.2012, 18:52
by Spider-Mann
Hallo, ich habe mir die drei ursprünglichen Zeilen nochmal angesehen.
Code: Select all
find ../exclude/ -type f -exec dos2unix {} > /dev/null 2>&1 \;
find ../xslt/ -type f -exec dos2unix {} > /dev/null 2>&1 \;
find ../static/ -type f -exec dos2unix {} > /dev/null 2>&1 \;

'> /dev/null' sorgt dafür, daß die Standard-Ausgabe ins Nirwana umgeleitet wird, und
'2>&1' sorgt dafür, daß Fehlermeldungen vorher auf die Standard-Ausgabe umgeleitet werden.

Wenn ich also Ausgaben sehen möchte, dann muß ich die Zeilen folgendermaßen ändern:
Code: Select all
find ../exclude/ -type f -exec dos2unix {} 2>&1 \;
find ../xslt/ -type f -exec dos2unix {} 2>&1 \;
find ../static/ -type f -exec dos2unix {} 2>&1 \;

ein '-q' bei dos2unix würde soviel wie '--quiet' bedeuten, also würden alle warnungen unterdrückt.
ein '|| echo find has a problem with ...' am Ende hieße, wenn es beim 'find'-Befehl einen Fehler gab würde der 'echo'-Befehl ausgeführt.

Also vielleicht so:
Code: Select all
find ../exclude/ -type f -exec dos2unix {} 2>&1 \; || echo find has a problem with exclude
find ../xslt/ -type f -exec dos2unix {} 2>&1 \; || echo find has a problem with xslt
find ../static/ -type f -exec dos2unix {} 2>&1 \; || echo find has a problem with static

MfG
Spider-Mann

Re: dos2unix

PostPosted: 19.04.2012, 15:11
by WSUSUpdateAdmin
Moin!

Spider-Mann wrote:Bei der Änderung von Version 7.3 auf Version 7.3.1 ist bei den drei Zeilen 574-575-576 mit denen die Dateien ins Linunx-Format convertiert werden scheinbar etwas schief gegangen.

Ja, leider. :(

Spider-Mann wrote:- tofrodos, daß evtl. unter Debian als dos2unix benutzt wird, hat keine Option '-q', es sollte also wirklich nur dos2unix benutzt werden dürfen.
- die find-Option '-exec' muß mit einem ';' enden, daß maskiert werden muß, damit es keine Verknüpfung zweier Zeilen wird
- das '+' verstehe ich nicht


Die Erklärung des Initiators dieser Änderungen dazu:
Code: Select all
Das "+" bewirkt, das das programm dos2unix nur einmal geladen wird,
mit allen 5000 files als parameter, und nicht 5000mal mit nur einem
file aufgerufen wird.

Die "" verhindern probleme mit leerzeichen und -zulässigen- LF in den dateinamen


Ich danke Ihnen für Ihre Aufmerksamkeit und Ihre Verbesserungsvorschläge, habe nun eine r353 eingecheckt (siehe http://trac.wsusoffline.net/browser/trunk), die hoffentlich das Problem behebt, und entschuldige mich für die Unannahmlichkeiten.

Gruß
Torsten Wittrock

Re: dos2unix

PostPosted: 19.04.2012, 17:46
by Spider-Mann
Hallo,
WSUSUpdateAdmin wrote:Das "+" bewirkt, das das programm dos2unix nur einmal geladen wird,
mit allen 5000 files als parameter, und nicht 5000mal mit nur einem
file aufgerufen wird.

Die "" verhindern probleme mit leerzeichen und -zulässigen- LF in den dateinamen

OK, das ist natürlich sinnvoll.

Bleibt noch das Problem des '-q' bei tofrodos unter Debian/Ubuntu.
Ein dos2unix-Packet gibt es dort natürlich auch.

MfG
Spider-Mann

P.S.:
Das sind keine Unannehmlichkeiten. Ich mache das um zu lernen.

Re: dos2unix

PostPosted: 20.04.2012, 08:31
by WSUSUpdateAdmin
Moin!

Spider-Mann wrote:Bleibt noch das Problem des '-q' bei tofrodos unter Debian/Ubuntu.
Ein dos2unix-Packet gibt es dort natürlich auch.

Jo, ist jetzt auch 'raus (r354).

Danke & Gruß
Torsten Wittrock

Re: dos2unix

PostPosted: 23.04.2012, 11:15
by hhullen
WSUSUpdateAdmin wrote:Moin!

Spider-Mann wrote:Bleibt noch das Problem des '-q' bei tofrodos unter Debian/Ubuntu.
Ein dos2unix-Packet gibt es dort natürlich auch.

Jo, ist jetzt auch 'raus (r354).

Danke & Gruß
Torsten Wittrock


Funktioniert leider auch noch nicht, jedenfalls nicht bei Distributionen, die weder "dos2unix" noch "tofrodos" im Suchpfad haben. "Slackware" beispielsweise hat "dos2unix" nur als Alias beim Login definiert, das funktioniert nicht bei Cronjobs.

Und der/das im Skript vorgesehene Alias von "fromdos" nach "dos2unix" hakt, weil "fromdos" eine andere Parameterübergabe hat als "dos2unix".

Am sichersten dürfte fürs pure Entfernen des 0x0d (CR) aus DOS-Dateien eine Funktion sein, die einzig dieses Zeichen entfernt.

Kern:

sed -i 's/<ctrl>v<ctrl>m$//g' $Datei

wobei "ctrl v ctrl m" je nach Editor unterschiedlich elegant zu übergeben ist (ich habe es aus einer DOS-Datei rüberkopiert; die Anzeige des Skripts zeigt dann eine neue Zeile).

In der Hex-Darstellung sieht der wesentliche Teil der "sed"-Zeile dann so aus:

73 2f 0d 24 2f 2f
s / $ / /

(HTML schluckt natürlich den leeren Platz beim 0d)

Noch ungetestet: mag sein, dass die Option "g" (global") in der "sed"-Zeile nicht nötig ist.

Mag sein, dass der "sed -i"-Aufruf auch direkt in die jeweilige "find"-Zeile eingebaut werden kann - die wird dann nur noch weniger überschaubar.

Re: dos2unix

PostPosted: 23.04.2012, 13:20
by hhullen
hhullen wrote:
WSUSUpdateAdmin wrote:Moin!


[...]

Am sichersten dürfte fürs pure Entfernen des 0x0d (CR) aus DOS-Dateien eine Funktion sein, die einzig dieses Zeichen entfernt.

Kern:

sed -i 's/<ctrl>v<ctrl>m$//g' $Datei

wobei "ctrl v ctrl m" je nach Editor unterschiedlich elegant zu übergeben ist (ich habe es aus einer DOS-Datei rüberkopiert; die Anzeige des Skripts zeigt dann eine neue Zeile).

[...]



Nachtrag: hier bei mir hat weder die Einbindung ins Skript per Alias noch per Funktion geklappt (warum auch immer).

Also habe ich den Aufruf in ein ausführbares Skript gepackt:

--------- Skript .../sh/CRLF --------------

#! /bin/sh
sed -i 's/^M$//g' $1
#

------------------ Ende Skript --------------

wobei "^M" das irgendwie zu erzeugende Zeichen 0x0d ist.

Und in den 3 "find"-Zeilen habe ich "dos2unix" ersetzt durch "./CRLF"

Funktioniert.

Re: dos2unix

PostPosted: 29.05.2012, 14:31
by WSUSUpdateAdmin
Moin!

Es gibt kritische Stimmen in der Gemeinde, die genau davon abraten, sed als dos2unix-Ersatz zu verwenden (vgl. http://www.linuxquestions.org/questions/programming-9/sed-suitable-to-replace-cr-lf-59348/ u.a.).
Deshalb möchte ich das so (vorerst) nicht einbauen.

Gruß
Torsten Wittrock

Re: dos2unix

PostPosted: 15.06.2012, 11:13
by Spider-Mann
Mein 'dos2unix' hat Probleme mit dem '+':
Code: Select all
dos2unix: +: No such file or directory
dos2unix: Skipping +, not a regular file.

Die dos2unix-Version: 5.3.3 (2012-03-10) oder liegt es evtl. daran, daß meine DS211j Busybox v1.16.1 als System verwendet?

Wäre hier eine FOR-Schleife nicht besser?
Code: Select all
#convert files to Linux format
for dir in exclude static xslt; do
  find ../$dir/ -type f -exec dos2unix "{}" + 2>&1 \; || echo find has a problem with $dir
done
anstatt
Code: Select all
#convert files to Linux format
find ../exclude/ -type f -exec dos2unix "{}" + 2>&1 \; || echo find has a problem with exclude
find ../static/ -type f -exec dos2unix "{}" + 2>&1 \; || echo find has a problem with static
find ../xslt/ -type f -exec dos2unix "{}" + 2>&1 \; || echo find has a problem with xslt

Re: dos2unix

PostPosted: 29.06.2012, 08:13
by WSUSUpdateAdmin
Moin!

Hab' die '+' rausgenommen ( :arrow: http://trac.wsusoffline.net/browser/trunk (r367)).

Danke & Gruß
Torsten