
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 -ic
es filtrar la lista inicial solo para aquellos archivos que contienen CRLF, luego dos2unix -ic
subfiltrar aquellos que también contienen LF, y el final realmente realiza la conversión. Las cut
llamadas son para recortar los dos espacios iniciales que confunden xargs
y -d
para resolver problemas con espacios en los nombres de archivos, ya que el resultado no se cita.