Selektives Korrigieren von LFs zu CRLFs

Selektives Korrigieren von LFs zu CRLFs

Gegeben:

  • ein großer Verzeichnisbaum, der eine Mischung aus Folgendem enthält:
    • Dateien mit LF-Zeilenenden
    • Dateien mit CRLF-Zeilenenden
    • Dateien mit einer seltsamen Mischung aus LF- und CRLF-Zeilenenden (aufgrund eines Fehlers)
    • Binärdateien
    • andere Dateien, die ich nicht anfassen möchte, auch wenn sie kaputt sind
  • Pfade, die möglicherweise Leerzeichen enthalten

Mein Ziel war, die Nur-LF- und Nur-CRLF-Dateien unverändert zu lassen und die Hybriddateien in Nur-CRLF-Dateien zu konvertieren und dabei auch die letzten beiden Gruppen unverändert zu lassen.

Dieser Zauberspruch funktioniert:

find . (some conditions to exclude stuff I don't want to mess with) |
    xargs -d '\n' unix2dos -ic | cut -c 3- |
    xargs -d '\n' dos2unix -ic | cut -c 3- |
    xargs -d '\n' unix2dos

Aber jetzt bin ich neugierig, ob es einen besseren/effizienteren Weg gibt, dies zu tun. (Nur mit Standard-Shell-Tools, nicht mit Perl/Python/usw.)

Der erste Filter unix2dos -icdient dazu, die anfängliche Liste auf nur die Dateien zu filtern, die CRLF enthalten, dann dos2unix -icwerden Unterfilter für die Dateien hinzugefügt, die auch LF enthalten, und der letzte Filter führt die eigentliche Konvertierung durch. Die cutAufrufe dienen dazu, die beiden führenden Leerzeichen zu entfernen, die für Verwirrung sorgen xargs, und der letzte -dsoll Probleme mit Leerzeichen in den Dateinamen lösen, da die Ausgabe nicht in Anführungszeichen gesetzt ist.

verwandte Informationen