Convertendo arquivos recursivamente de finais de linha dos para finais de linha unix

11

Estou procurando um comando que eu poderia usar para executar em um diretório e subdiretório inteiro que converterá todas as terminações de linha do DOS para UNIX.

Ele deve ser capaz de detectar se um arquivo é texto ou binário.

Eu instalei dos2unixusando macports, mas parece que ele perde a opção recursiva.

sorin
fonte
Definir como um arquivo é texto ou binário?
precisa saber é o seguinte
Texto: Nenhum ASCII abaixo de 32, exceto TAB, CR, LF.
Max Ried

Respostas:

22

Tente find . -name "*" -type f -exec dos2unix {} \;.


Caso dos2unixnão esteja disponível no seu sistema, você pode usar o seguinte script (salvar como dos2unixe definir como executável):

#!/bin/sh

perl -pi -e 's/\r\n/\n/;' $*
chitsaou
fonte
Não execute este comando na raiz de um repositório Git, caso contrário, você estragará o seu repositório!
Nick
Além disso, eu tinha melhor sorte usando perl -pi -e 's/\r\n|\n|\r/\n/;' $*( fonte )
Nick
1

Aqui está um código shell de linha find . -name "*" -type f -exec perl -pi -e 's/\r\n/\n/;' {} \;

l0pan
fonte
As respostas de uma linha são desencorajadas. Tente adicionar mais detalhes ou comente.
Max Ried
Funciona como anunciado! O que mais a acrescentar? ;-)
Taiko
2
Hm ... bem, ele estragou alguns arquivos png. Manuseie com cuidado
Taiko