
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 -ic
subfiltrar para aqueles que também contêm LF, e o final realmente faz a conversão. As cut
chamadas são para eliminar os dois espaços iniciais que confundem xargs
e para -d
resolver problemas com espaços nos nomes de arquivos, já que a saída não é citada.