Corrección selectiva de LF a CRLF

Corrección selectiva de LF a CRLF

Dado:

  • un gran árbol de directorios que contiene una mezcla de:
    • archivos con finales de línea LF
    • archivos con finales de línea CRLF
    • archivos con una mezcla extraña de finales de línea LF y CRLF (debido a un error)
    • archivos binarios
    • Otros archivos que no quiero tocar incluso si están rotos.
  • rutas que pueden contener espacios

Mi objetivo era dejar solo los archivos LF y CRLF en paz, y convertir los archivos híbridos en archivos solo CRLF, dejando también los dos últimos grupos en paz.

Este encantamiento funciona:

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

Pero ahora tengo curiosidad por saber si existe una forma mejor o más eficiente de hacerlo. (Usando sólo herramientas de shell estándar, no Perl/Python/etc.)

FWIW, el primero unix2dos -ices filtrar la lista inicial solo para aquellos archivos que contienen CRLF, luego dos2unix -icsubfiltrar aquellos que también contienen LF, y el final realmente realiza la conversión. Las cutllamadas son para recortar los dos espacios iniciales que confunden xargsy -dpara resolver problemas con espacios en los nombres de archivos, ya que el resultado no se cita.

información relacionada