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
 
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.
 
In den Ports gibt es ein recht nettes Helferlein:

/usr/ports/converters/dosunix

Gruß,

Ice
 
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>
 
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)
 
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
 
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
 
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:
Zurück
Oben