Umwandlung von Dateien im DOS-Format -> UNIX

testit

Well-Known Member
Hallo,

leider hat mir WS_FTP 2006 - anders als der Vorgänger - einiges auf meinem Server durcheinander gebracht, indem er downgeloadete Dateien mit CR/LF versetzte und beim Rückspielen so beliess.

Auswirkungen hatte das Ganze nur in ganz bestimmten Fällen bei PHP-Applikationen.

Hat jemand ein Script oder einen Ausdruck parat, mit dem ich in einem Verzeichnis nebst Unterverzeichnissen in allen betroffenen Dateien, CR/LF durch LF ersetzen lassen kann.

Die Dateien mit CR/LF sollen also automatisch gefunden und die Ersetzungen in den Dateien vorgenommen werden.

find . -type f -name "*.*" | xargs perl -pi -e 's/SUCH/ERSETZ/g'
könnte hinhauen, aber ich bin nicht im Bilde, wie in SUCH und ERSETZ CR/LF und LF abzubilden sind?

Danke und Gruss
testit
 

xbit

Well-Known Member
Unix Zeilenende: \n
Windows Zeilenende: \r\n

Ansonsten kannte ich noch immer recode. Ich weiss nur leider nicht, ob das als Port irgendwie existiert oder im
System schon vorhanden ist.
 

Ice

Well-Known Member
In den Ports gibt es ein recht nettes Helferlein:

/usr/ports/converters/dosunix

Gruß,

Ice
 

markus

Well-Known Member
Um mal nen fortunes Eintrag zu zitieren:
Code:
Need to remove all those ^M characters from a DOS file? Try

        tr -d \\r < dosfile > newfile
                -- Originally by Dru <genesis@istar.ca>
 

Th0min4tor

OS-Wechselwähler
dettus schrieb:
Code:
% dos2unix filename
das is aber nicht "standardmäßig" bei ner freebsd-installation dabei oda?
Egal, jedenfalls wollt ich noch hinzufügen, dass es in /ports/converters/unix2dos zu finden is (ein dos2unix-port gibts nicht -> beim unix2dos-port is dos2unix mit dabei)
 

testit

Well-Known Member
xbit schrieb:
Unix Zeilenende: \n
Windows Zeilenende: \r\n

Ansonsten kannte ich noch immer recode. Ich weiss nur leider nicht, ob das als Port irgendwie existiert oder im
System schon vorhanden ist.

Hi,

find . -type f -name "*.php" | xargs grep -l \r\n
listet offenbar DIE PHP-Datein auf, die im Quellcode als ASCII \r\n enthalten.

\r\n wird offensichtlich so nicht als "nicht sichtbare" Zeichen interpretiert.


Gruss
testit
 

tschepe

Well-Known Member
Du musst die \n und \r Escapen, sonst wandelt deine shell die Zeichen um.

Code:
find . -type f -name "*.php" | xargs grep -l "\r\n"

oder:

Code:
find . -type f -name "*.php" | xargs grep -l \\r\\n
 

testit

Well-Known Member
tschepe schrieb:
Du musst die \n und \r Escapen, sonst wandelt deine shell die Zeichen um.

Code:
find . -type f -name "*.php" | xargs grep -l "\r\n"

oder:

Code:
find . -type f -name "*.php" | xargs grep -l \\r\\n

Hmm,

das haut leider nicht hin!

Habe mir eine Testdatei "zeilentest.txt" angelegt, die mit vi so aussieht:
^M

Das ^M muss ich wegbekommen, aber leider erkennt
find . -type f -name "*.php" | xargs grep -l \\r\\n
das Vorkommen von ^M in der Testdatei nicht!

Was mich auch verwirrt:
find . -type f -name "zeilentest.txt" | xargs grep -l '\r'
ergibt NULL Treffer!

od -c zeilentest.txt gibt aus:
\r \n \r \n

Und
perl -p -i -e 's/\r//g' zeilentest.txt
löscht tatsächlich die ^M

Wieso greift dann
find . -type f -name "zeilentest.txt" | xargs grep -l '\r'
nicht?

Gruss
testit
 
Zuletzt bearbeitet:
Oben