• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Dateien in UTF-8 konvertieren

PHAG

Newbie
SuSE 9.3

Hallo.

Benötige ein Script welches mir alle Dateien (*.php *.phtml *.inc *.html etc) in einem bestimmten Verzeichniss inkl. aller Unterverzeichnisse in UTF-8 konvertiert und dabei alle Rechte und Owner Angaben behält.

Kann mir jemand weiterhelfen?

Gruss
PHAG
 

Gimpel

Guru
zB
Code:
find . -name '*.php' -exec recode latin1..u8 {} \;

das paket 'recode' muss dazu installiert sein
 
OP
P

PHAG

Newbie
Gimpel schrieb:
zB
Code:
find . -name '*.php' -exec recode latin1..u8 {} \;

das paket 'recode' muss dazu installiert sein

Nimmt der Code auch gemountete Verzeichnisse und Symb.Link-Verzeichnisse mit?

Gruss
PHAG
 

Gimpel

Guru
PHAG schrieb:
Nimmt der Code auch gemountete Verzeichnisse und Symb.Link-Verzeichnisse mit?

Gruss
PHAG

der . bedeutet dass es im aktuellen verzeichnis bleibt
Code:
find /home/mooman -name '*.php' -exec recode latin1..u8 {} \;
würde /home/mooman durchsuchen
 
OP
P

PHAG

Newbie
Habe es eben getesttet.

Dein Code:
find . -name '*.php' -exec recode latin1..u8 {} \;

nimmt alle Unterverzeichnisse und auch gemountete Verz. die in einem Unterverzeichniss stecken.

Mit -mount kann ich die gemountete Verz. umgehen.
Aber Unterverzeichnisse nimmt er mit. Definitiv

Gruss und Danke
PHAG
 

nollsa

Advanced Hacker
PHAG schrieb:
SuSE 9.3

Hallo.

Benötige ein Script welches mir alle Dateien (*.php *.phtml *.inc *.html etc) in einem bestimmten Verzeichniss inkl. aller Unterverzeichnisse in UTF-8 konvertiert und dabei alle Rechte und Owner Angaben behält.

Kann mir jemand weiterhelfen?

Gruss
PHAG
Hallo! Bitte im richtigen Forum posten. Gruß Stefan
 
OP
P

PHAG

Newbie
panamajo schrieb:
Oder iconv statt recode

Hallo.

Das ganze ist wohl doch nicht so das richtige.

Wenn ich es mit
find . -name '*.php' -exec recode latin1..u8 {} \;
mache vergeigts mir alle Umlate im Quellcode

und wenn ich es mit
find . -name '*.php' -exec iconv latin1..u8 {} \;
mache, bekomme ich folgende fehlermeldung:
iconv: cannot open input file `latin1..u8': No such file or directory

Was nun?
 

panamajo

Guru
PHAG schrieb:
find . -name '*.php' -exec iconv latin1..u8 {} \;
mache, bekomme ich folgende fehlermeldung:
iconv: cannot open input file `latin1..u8': No such file or directory

Was nun?
iconv --help, Parameterliste entsprechend anpassen.
 
PHAG schrieb:
Wenn ich es mit
find . -name '*.php' -exec recode latin1..u8 {} \;
mache vergeigts mir alle Umlate im Quellcode
Genau das willst Du doch! Du willst die Umlaute in UTF-8 statt ISO-8859-1 haben. Dies führt dazu, dass Umlaute in HTML-Dateien, bei denen
Code:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
im Header steht, selbstverständlich nicht mehr funktionieren, weil sie als ISO-8859-1 deklariert, tatsächlich aber in UTF-8 kodiert sind. Die Zeichensatz-Angabe musst Du dann natürlich noch separat ändern, z.B. mit Hilfe eines Regulären Ausdrucks.

Anderes Erklärungsmodell: Du verwendest einen UTF-8-untauglichen Editor. Etwas mehr Angaben müsstest Du schon liefern - mindestens, ob die HTML-Dateien eine Zeichensatz-Angabe haben und welche Software Du nutzt.

Noch ein weiteres Erklärungsmodell: Die Dateien sind schon in UTF-8 kodiert, Du weißt es bloß nicht, oder in einem ganz anderen Zeichensatz, aber nicht in ISO-8859-1.

So, Ende der Ratestunde.
PHAG schrieb:
und wenn ich es mit
find . -name '*.php' -exec iconv latin1..u8 {} \;
mache, bekomme ich folgende fehlermeldung:
iconv: cannot open input file `latin1..u8': No such file or directory
Ja, da hast Du "Oder iconv statt recode" wohl angewendet, ohne es zu verstehen. "iconv" hat eine andere Syntax als "recode" und kann Dateien überhaupt nicht "in-place" editieren, sondern nur über eine temporöre Zwischenablage.
 
Oben