Camaradinhas, aqui começa mais uma dica do Dino trazendo uns paranauês doidões do tempo em que o amigo
Teixeira trabalhava nos ENIACs da vida.
Hoje, quero expandir a utilidade da dica:
Do amigo
rcjeferson, trazendo um meio de realizar a dita conversão em massa entre os
end-of-line do Windows, GNU/Linux e Mac OS.
Mas antes, vamos à uma conversinha: o que é o
end-of-line?
Bem, esse é o caractere que o sistema enfia no arquivo no momento em que você pressiona o
Enter.
Quando algum outro programa "ler" o arquivo, ele vai encontrar o tal
end-of-line e vai entender: "ah, aqui acaba o raio da linha, tenho que passar pra próxima".
Acontece que esses três sistemas operacionais não usam o mesmo
end-of-line. O Windows, aferrado ao ASCII e às máquinas de Fax, usa os caracteres <CR> ("carriage return", ou "retorno de carro" - pensem naquele movimento que se precisa fazer ao chegar ao final da linha em uma máquina de escrever. E agora, reimaginem a cena sabendo que o nome daquela peça é carro) e <LF> ("line feed", que é o que abre a nova linha").
O
GNU/Linux usa só o <LF>, e o Mac OS usa só o <CR>. Caos total, não é? Ainda mais se você é programador, usa mais de um sistema operacional e fica louquinho quando seu editor de textos estraga tudo.
Mas não se aflija, tudo que você precisa para a tarefa é o
Vim. Isso mesmo, o
Vim. Na maioria dos casos, isso significa que você não precisa instalar nada no seu computador. E se você não tem o Vim instalado, me dê seu endereço real que eu vou aí te cobrir de socos!
Um exemplo para explicar melhor:
find . -name "*txt" -execdir vi "{}" -c "set ff=dos" -c "wq" \;
Onde:
- Procura todos os arquivos no diretório atual e subdiretórios dele, cujo nome termina em txt e aplica o comando: vi arquivo -c "set ff=dos" -c "wq" neles.
- O name "*txt" é só um critério de busca, você pode usar qualquer um que lhe agrade (por exemplo: "-type f" para converter todos os arquivos, "-ctime" pra converter os mais recentes, etc.).
- O pulo do gato é do -execdir pra frente: -execdir diz para executar o comando a seguir, como se ele fosse executado nativamente do diretório em que o arquivo se encontra. Útil em casos de árvores de diretórios complicadas;
- "{}" (sim, entre aspas mesmo), serve para dizer ao comando (no caso, o vi) para agir sobre o arquivo localizado pelo find.
- -c "set ff=dos" (aspas obrigatórias), indica que o vi deve aplicar o comando de modo normal (:set ff=dos) ao arquivo.
- -c "wq" (aspas obrigatórias), indica que o vi deve aplicar o comando de modo normal (":wq") ao arquivo.
Mas o que fazem esses comandos de modo normal do Vi?
Bem,
:set ff=string altera o
end-of-line do arquivo, e string pode ser dos (<CR><LF> usado pelo Windows), Unix (<LF> usado pelo GNU/Linux) ou Mac (<CR> usado pelo MacOS).
Já o comando
:wq salva e fecha o arquivo. Se o arquivo usar um
end-of-line diferente do GNU/Linux, o próprio
Vim te indicará isso ao pé da página, quando você abrir o arquivo, conforme você pode ver pelas screenshots a seguir (P.S.: não liguem pros textos, é coisa de RPGista):
Aqui mostra o
set ff=mac. O GNU/Linux vai acusar que o arquivo está sem finais de linha (claro, não tem o <LF>). Caso você queira desfazer a caca, reinserindo os finais de linha em um arquivo com
end-of-line do Mac OS, será preciso abrir o arquivo pelo
Vim e rodar os comandos em modo normal:
:%s/^V^M/^V^M/g
:set ff=unix
:wq
Onde:
- ^V significa: CTRL V
- ^M significa: CTRL M
Bem, com esta pequena aula, de que nem sempre instalar um pacote adicional é a melhor saída quando a gambiarra está à disposição, o Dino se despede desejando a todos vocês um bom final de Samhain (o festejo, não o dia, vai do dia 31/10 ao 02/11), um ótimo desaniversário amanhã e uma "quentíssima" amante zumbi!