| 

.NET C# Java Javascript Exception

Dateien mit Unlauten im Namen kopieren

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Dateien mit Unlauten im Namen kopieren

fi-online - 12.05.2009 09:21
Hallo,

ich versuche gerade mit Groovy und Apache/Commons/io einen ganzen Dateibaum auf einer Linux Machine zu kopieren. Das geht soweit auch gut, bis ein Dateiname Umlaute enthält. Ich erhalte dann immer eine Exception, dass die Quelldatei nicht gefunden wurde.

Mein Code sieht in etwa so aus:

srcdir.eachFileRecurse{ f ->
::
FileUtils.copyFile( f, dest)
::
}


Die Ausgaben der Logs sieht dann so aus:

Exception: java.io.FileNotFoundException: Source '/home/xxx/archive/yyy/01Ablage/A8T129~0/Faltblatt nur f�r REV16blh340.pdf' does not exist

oder

Exception: java.io.FileNotFoundException: Source '/home/xxx/archive/yyy/01Ablage/Abl REV 9/Faltbl�tter zur REV9' does not exist

Weiss jemand eine Rat.

Vielen Dank
Thomas


Re: Dateien mit Unlauten im Namen kopieren

christian - 12.05.2009 10:24
Hallo Thomas,

probier mal auf der Konsole folgendes:

touch äöüß.txt
groovysh
> new File(".").eachFile{ println it}

Wird da der Dateiname mit den Umlauten korrekt ausgegeben (auf der Zielmaschine)?

Gruß
Christian


Re: Dateien mit Unlauten im Namen kopieren

fi-online - 12.05.2009 10:54
Sorry, das war nicht ganz richtig, in der Linux-Shell steht nicht � sondern ein Kästchen.

Thomas


Re: Dateien mit Unlauten im Namen kopieren

rawi - 13.05.2009 13:33
fi-online schrieb:
-------------------------------------------------------
> ich versuche gerade mit Groovy und
> Apache/Commons/io einen ganzen Dateibaum auf einer
> Linux Machine zu kopieren. Das geht soweit auch
> gut, bis ein Dateiname Umlaute enthält. Ich
> erhalte dann immer eine Exception, dass die
> Quelldatei nicht gefunden wurde.

Hi Thomas,

Du musst vom Anfang an die Windows-Share oder den USB Stick mit den richtigen mount-Optionen mounten.

Wenn ein Windows-Charset von Linux _standard_ gemountet wird, werden die Dateinamen mit Umlauten der maßen schlimm interpretiert, dass ich so keine Möglichkeit gefunden habe, sie noch zu übersetzen.

ABER, wenn Du beim mounten die Option ( -o iocharset=utf8 ) mitgibst, dann wird die Share so eingebunden, dass die Dateinamen unter Linux korrekt erscheinen, als hättest Du die Dateien lokal mit utf8 generiert.
Dann kannst Du sie auch kopieren.

Gerade probiert: mein Kubuntu mountet die USB-Sticks (vfat) automatisch mit der Option 'utf8'.

Noch ein Problem wird der Inhalt der Dateien sein.
Falls das reine Textdateien sind, musst Du unter Umständen auch den Inhalt umkodieren. Entweder iconv in der Console oder ... gerade probiert:
new File('/home/rawi/work/äöüß.txt').withWriter { writer ->
    writer << new File('/mnt/temp/äöüß.txt').newReader('WINDOWS-1252')
 }

Binäre Dateien brauchen das freilich nicht.

Gruss, Rawi


Re: Dateien mit Unlauten im Namen kopieren

rawi - 13.05.2009 14:33
addendum:

Gerade noch ein Paar Tests gemacht.

Die komische uminterpretierung der Umlaut-Datei-Namen wurde beim Kopieren von MidnightCommander so gemacht, dass den Namen nicht mehr bei zu kommen war.
MidnightCommander hat einfach äöüß.txt in ????.txt umkopiert
rawi@rawi:~/work$ ls -b1 *.txt
????.txt
Falls die Umlaut-Namen-Dateien "sauberer" mit cp kopiert wurden, dann konnte ich gerade diese Namen auch lokal mit convmv in utf8 übersetzen.
rawi@rawi:~/work$ ls -b1 *.txt
\344\366\374\337.txt

rawi@rawi:~/work$ convmv --notest -f iso-8859-15 -t utf8 *.txt
Your Perl version has fleas #37757 #49830
mv "./&#65533;&#65533;&#65533;&#65533;.txt" "./äöüß.txt"
Ready!
(Übrigens, ich weiß nicht, warum meine Perl-Version Flöhe haben soll)

Und ich verstehe nicht, warum Groovy bei dem selben Namen mit:
new File('/home/rawi/work/').eachFile {
    println new String(it.name.getBytes(),'ISO-8859-15')
 }

Nur das Folgende printet:
ᅵᅵᅵᅵ.txt

PS: Mein (alter) Samba-Server hat die Locale 8859-15


Re: Dateien mit Unlauten im Namen kopieren

wilhelm.nagy@bfw.gv.at - 14.05.2009 11:25
Dein Perl hat auch keine Flöhe aber möglicherweise Käfer und ist auch schon ein bisschen alt ;-)))

[forum.ubuntuusers.de]
und
[www.linux-archive.org]

\^/ili
(Wilhelm Nagy)


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Dateien mit Unlauten im Namen kopieren" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.