dos2unix

dos2unix

Postby Spider-Mann » 17.04.2012, 21:30

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
Spider-Mann
 
Posts: 19
Joined: 31.10.2011, 22:10

Re: dos2unix

Postby Spider-Mann » 18.04.2012, 19:52

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
Spider-Mann
 
Posts: 19
Joined: 31.10.2011, 22:10

Re: dos2unix

Postby WSUSUpdateAdmin » 19.04.2012, 16:11

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
WSUSUpdateAdmin
Administrator
 
Posts: 2121
Joined: 07.07.2009, 15:38

Re: dos2unix

Postby Spider-Mann » 19.04.2012, 18:46

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.
Spider-Mann
 
Posts: 19
Joined: 31.10.2011, 22:10

Re: dos2unix

Postby WSUSUpdateAdmin » 20.04.2012, 09:31

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
WSUSUpdateAdmin
Administrator
 
Posts: 2121
Joined: 07.07.2009, 15:38

Re: dos2unix

Postby hhullen » 23.04.2012, 12:15

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.
Viele Grüsse
Helmut
hhullen
 
Posts: 100
Joined: 23.04.2012, 11:43

Re: dos2unix

Postby hhullen » 23.04.2012, 14:20

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.
Viele Grüsse
Helmut
hhullen
 
Posts: 100
Joined: 23.04.2012, 11:43

Re: dos2unix

Postby WSUSUpdateAdmin » 29.05.2012, 15:31

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
WSUSUpdateAdmin
Administrator
 
Posts: 2121
Joined: 07.07.2009, 15:38

Re: dos2unix

Postby Spider-Mann » 15.06.2012, 12:13

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
Spider-Mann
 
Posts: 19
Joined: 31.10.2011, 22:10

Re: dos2unix

Postby WSUSUpdateAdmin » 29.06.2012, 09:13

Moin!

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

Danke & Gruß
Torsten
WSUSUpdateAdmin
Administrator
 
Posts: 2121
Joined: 07.07.2009, 15:38

Next

Return to Linux

Who is online

Users browsing this forum: No registered users and 4 guests