Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Probleme mit Sonderzeichen in Dateinamen

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.03.2001
    Beiträge
    650

    Unhappy Probleme mit Sonderzeichen in Dateinamen

    Um Dateien zu verarbeiten verwende ich bisher find und pipe:

    find ./ -type f -print | dupmerge

    und das funktionniert auch mit Dateinamen die Klammern, Anführungsstriche usw. enthalten, aber nicht mit einigen Dateien wie dieser hier:

    > ls -ilaf ...
    2420359 -rwxrwxr-x 1 nobody0 users 9163 2001-08-01 00:00 ftp.lugcamp.de/chaas/1/b%FCcher/b%FCcher/books/Unix2/upt/ch09_14??tm

    Das ist die Ausgabe unter SuSE 9.3 und unter Debian wird die Datei als

    ch09_14\n\ntm

    angezeigt; anscheinend sind da zwei newlines drin.

    Das Einlesen von dupmerge wird mit

    while (fgets (buf, sizeof (buf), stdin), !feof (stdin))

    vorgenommen und das nachfolgende lstat auf die betreffende Datei schlägt fehl, weil deren Name als "ch09_14)" und "tm" eingelesen wird, also als zwei Dateinamen eingelesen wird.

    Irgendwelche Vorschläge?

    Und wo gibt's ausgefallene Dateinamen-Sammlungen, die man zum Testen nehmen kann?

  2. #2
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762
    Man kann Dateien zwar mit Sonderzeichen benennen aber empfehlenswert ist das nicht. Es ist schon übel genug wenn Leerzeichen in Dateinamen vorkommen.
    Die ganzen Funktionen arbeiten mit \n, so dass man auf zwei andere Wege ausweichen muss:
    a) Du arbeitest mit Verzeichnissen und lässt Dir alle Dateinamen vom Verzeichnis geben
    b) Falls Du weißt wie lang die Dateinamen sind, dann kannst Du versuchen <Dateinamenlänge> Zeichen einzulesen

    Ich würde es vielleicht mit Methode a) versuchen, aber leider ist die nicht plattformunabhängig, falls Du das brauchst.
    I haven't lost my mind - It's somewhere on a backup-disc

  3. #3
    Registrierter Benutzer
    Registriert seit
    22.03.2001
    Beiträge
    650
    Aha, dann brauche ich Funktionen, die \0 als Trennzeichen verwenden, denn mit

    find ./ -type f -print0 |

    werden die Dateinamen mit \0 terminiert.
    Mit
    while (fgets (buf, sizeof (buf), stdin), !feof (stdin))
    werden nämlich nur 0 Dateien eingelesen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •