Correção seletiva de LFs para CRLFs

Correção seletiva de LFs para CRLFs

Dado:

  • uma grande árvore de diretórios contendo uma mistura de:
    • arquivos com finais de linha LF
    • arquivos com finais de linha CRLF
    • arquivos com uma mistura estranha de terminações de linha LF e CRLF (devido a um bug)
    • arquivos binários
    • outros arquivos que não quero tocar, mesmo que quebrados
  • caminhos que podem conter espaços

Meu objetivo era deixar os arquivos somente LF e somente CRLF em paz e converter os arquivos híbridos em arquivos somente CRLF, deixando os dois grupos finais sozinhos também.

Este encantamento 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

Mas agora estou curioso para saber se existe uma maneira melhor/mais eficiente de fazer isso. (Usando apenas ferramentas shell padrão, não Perl/Python/etc.)

FWIW, a primeira unix2dos -icé filtrar a lista inicial apenas para os arquivos que contêm CRLF, depois dos2unix -icsubfiltrar para aqueles que também contêm LF, e o final realmente faz a conversão. As cutchamadas são para eliminar os dois espaços iniciais que confundem xargse para -dresolver problemas com espaços nos nomes de arquivos, já que a saída não é citada.

informação relacionada