• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Wie suche ich nach Dateien mit Sonderzeichen?

Mitglied seit
10.08.2000
Beiträge
12.908
Reaktionen
1
Linux erlaubt ja Sonderzeichen in Dateinamen. Windows mag diese gar nicht.
Ich habe kürzlich eine Datenpartition von XFS auf NTFS kopiert (unter Linux natürlich, nur das kann XFS lesen). Linux hat dann munter alle Sonderzeichen auf die NTFS-Partition geschrieben und von Linux aus kann ich diese auch ganz problemlos abrufen. Nur der Windows-Dateimanager hängt sich jedes mal auf, wenn ich ein Verzeichnis mit Dateien mit Sonderzeichen öffnen will.

Leider geht es nicht nur um die üblichen Sonderzeichen, nach äöü könnte ich ja auch einfach manuell suchen. Ich habe aber zusätzlich noch ein paar Dateien mit einem komischen "?" in einer box (also kein normales Fragezeichen) im Dateinamen, d.h. hier ist bei der Kodierung etwas schiefgelaufen und ein unbestimmtes Symbol steckt im Dateinamen. Linux kümmert sich da nicht weiter drum, zeigt das kryptische "?" an und alles funktioniert, Windows dagegen mag es gar nicht.

Die Datenplatte hat hunderte von Verzeichnissen, jeweils noch mit Unterverzeichnissen, das per Hand durchzugehen ist vollkommen unmöglich.

Ich müsste also irgendwie (unter Linux, Windows kann ja nicht vernünftig auf die Daten zugreifen) nach Dateinamen suchen, die irgendwelche anderen Zeichen als a-z, A-Z, 0-9 enthalten.
Hat jemand eine Idee, wie genau ich das machen kann? Mein erster Gedanke war natürlich regex aber das "?!" verwirft ja komplette Ergebnisse bei einem match der negativen Bedingung, also ein einfaches "?!a-zA-Z0-9" funktioniert nicht :(
 
Mitglied seit
15.05.2003
Beiträge
11.307
Reaktionen
8
Ort
Fortuna 1895 Düsseldorf
sonderzeichen in dateinamen sind generell keine gute idee, egal unter welchem betriebsystem. man sollte grundsätzlich immer darauf verzichten. dazu gehören auch leerzeichen und umlaute wie ÄÖÜß usw.


wie wird denn das zeichen dargestellt, wenn du autocompletion auf die datei machst (tabtaste)? die shell maskiert diese zeichen dann automatisch und mit dieser maskierung kannst du dann auch in deiner regexp arbeiten.

eventuell hilft auch die lösung von hier
 
Mitglied seit
01.01.1970
Beiträge
1.170
Reaktionen
0
versuchs mal mit perl.
über alle dateien und ordner-handle iterieren und dann sowas mit dem namen anstellen wie:
$file =~ s/!//g
$file =~ s/?//g
oder halt mit der regex exclusion [^a-zA-Z0-9]


btw. wieso geht "find -regex '*[^a-zA-Z0-9]*.*" nicht?
 
Zuletzt bearbeitet:
Mitglied seit
31.10.2004
Beiträge
289
Reaktionen
0
Guck mal nach convmv: http://linuxwiki.de/convmv

Wenn es in einem Verzeichnis klappt, kannst du mit convmv -r rekursiv durch alle Verzeichnisse gehen. Wenn die Ausgabe dann gut aussieht, kannste alle Dateien mit der Option --notest umbenenen :)
 
Mitglied seit
10.08.2000
Beiträge
12.908
Reaktionen
1
convmv ist prima und stand auch unten in 2fickendehundes link ;) danke
 
Oben