Corrigindo seletivamente LFs para CRLFs

1

Dado:

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

Meu objetivo era deixar apenas os arquivos somente LF e CRLF 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 somente ferramentas shell padrão, não Perl / Python / etc.)

FWIW, o primeiro unix2dos -ic é filtrar a lista inicial para apenas os arquivos contendo CRLF, então dos2unix -ic subfiltra para aqueles que também contêm LF, e o final realmente faz a conversão. As chamadas cut devem cortar os dois espaços iniciais que confundem xargs , e o -d é para resolver problemas com espaços nos nomes de arquivos, já que a saída não é citada.

    
por Miral 03.10.2016 / 06:03

0 respostas