Converter finais de linhas Unix em Windows

38

Recentemente, voltei ao Windows a partir do Linux. Eu tenho alguns arquivos com CRLFs, alguns com LFs e outros que são misturados. Existe um utilitário que me ajudará a encontrar todos os meus arquivos tocados pelo Unix e convertê-los em arquivos terminados em CRLF adequados?

O utilitário deve ser executado no Windows, não no Linux. Eu já mudei. Prefiro não instalar o Cygwin se puder evitá-lo.

Matthew Scouten
fonte
11
relacionado: consulte superuser.com/questions/38744 superuser.com/questions/27060 superuser.com/questions/52044 ... qualquer ferramenta mencionada nesses pode ser revertida para realizar o que você quer fazer
quackote quixote
Pergunta duplicada
ukanth 17/11/2009
As soluções nas chamadas perguntas duplicadas são executadas em plataformas Linux ou executam a conversão oposta. Eu não tenho mais linux. Eu tenho janelas
Matthew Scouten 17/11/2009
11
todos eles estão disponíveis para Windows via Cygwin, GnuWin32, UnxUtils ou similares. Eu acredito que existem scripts do Powershell que podem fazer isso também, embora eu não conheça o suficiente para fornecer links.
quack quixote
11
@ Quack: A pergunta afirma especificamente que o usuário está procurando algo que fará o trabalho no Windows, usando um utilitário do Windows.
Brian Lacy

Respostas:

34

Você pode convertê-los com o unix2dosutilitário em sua plataforma Linux. Existem unix2dos versões disponíveis para Windows também.

Se você possui o Perl instalado, também pode usar este liner:

perl -p -e 's/\n/\r\n/' < UNIX_LF.txt > WINDOWS_CRLF.txt
John T
fonte
Fiz algo semelhante a isso, mas usei python.
Matthew Scouten 19/11/2009
2
@ Matthew Scouten: então ... você encontrou um utilitário unix que roda no Windows! Parabéns!
quack quixote
8
sim e não. Eu escrevi meu próprio utilitário. Eu poderia ter feito isso desde o início, mas esperava economizar 30 minutos. Infelizmente eu não estava feliz com nenhum utilitário disponível. O mais próximo que encontrei corrompeu todos os arquivos binários no diretório.
Matthew Scouten
Há problemas na conversão com dos2unix e unix2dos - se o arquivo tiver misturado CRLF e LF, pode haver algumas ocorrências que não seriam substituídas.
pbies
17

Aqui está uma maneira fácil e rápida.

Arraste e solte o arquivo de texto no Chrome (não conheço outros navegadores) e, em seguida, recorte e cole no arquivo original :)

user45832
fonte
2
hehe ... esta resposta me fez lol
ClintM
todos os navegadores podem ler as terminações de linha do Unix muito bem, incluindo o IE. Mas, mesmo assim, o wordpad também pode fazer isso, e o bloco de notas moderno também . O que é importante aqui é como converter vários arquivos automaticamente
phuclv
10

O que eu achei melhor para percorrer recursivamente as pastas, permitir filtros de arquivos e permitir uma pesquisa simples por "\ r \ n" e substituí-lo por apenas "\ n" foi o Notepad ++ .

O Notepad ++ é um dos melhores programas de bloco de notas de código aberto para Windows. É muito simples e poderoso. Ele lidou com a linha que finaliza a pesquisa / substituição. Um contratado verifica vários arquivos .c e .h em nosso repositório com terminações de linha Linux \ r \ n, mas como a maioria das pessoas padronizou as ferramentas de construção do Windows / Eclipse, os arquivos não serão construídos até que as terminações de linha sejam convertidas .

Matt
fonte
8
Eu acho que você inverteu as terminações lá: linux é \ n, janelas é \ r \ n
Matthew Scouten
10
O Notepad ++ também possui um Edit -> EOL Conversionmenu simples se o número de arquivos a serem convertidos for pequeno.
user1071136
8

Use o canivete suíço .

Por exemplo: sfk addcr -dir . -file .txt -norec
altera as terminações LF em CR / LF para Windows, em todos os arquivos .txt do diretório atual, mas NÃO em subdiretórios (sem recursão).

Mas este programa faz muito mais do que apenas isso.

harrymc
fonte
Eu não especificar -norecporque quero recursão para acontecer, mas não parece que isso
Csaba Toth
6

No Cygwin, você pode converter entre arquivos Windows Unix e "DOS" AKA Windows usando dois utilitários embutidos:

Converta para o formato DOS CR / LF:

u2d filename

Converta de volta para o formato Unix CR:

d2u filename

O arquivo é deixado no local com o mesmo nome.

Apreciar! Rick

Rick V
fonte
Às vezes, isso é chamado dos2unixou unix2doscaso você não consiga encontrá-lo como u2d ou d2u. Há tambémunix2mac
gtatr
3

Vou jogar esta solução lá fora. Git fará isso. Veja este post sobre isso

Então, teoricamente, você poderia fazer isso para converter uma árvore inteira

cd root/of/tree
git init .
git add .
git commit -m "initial commit"
echo "* text eol=crlf" > .gitattributes
git rm --cached -r .
git reset --hard

Mude crlfpara lfse você quiser ir para o outro lado. NOTA: você ainda não terminou, continue lendo

Digite git statuspara ver quais arquivos serão afetados. Pode ser necessário adicionar linhas como

*.jpg binary
*.png binary
*.gif binary

etc para .gitattributesevitar a conversão de certos arquivos. Você também pode marcar explicitamente certos arquivos como texto

*.md text
*.css text

Em seguida, basta repetir essas 2 linhas depois de editar .gitattributes

git rm --cached -r .
git reset --hard

Em seguida, use git statusnovamente para ver quais arquivos serão alterados. Quando tiver certeza de que todos os arquivos que você deseja afetar estão listados git status, confirme

git add .
git commit -m "normalize line endings"

agora verifique todos os arquivos novamente

git rm --cached -r .
git reset --hard

Agora eles devem ter quaisquer que sejam os finais de linha desejados.

** NOTA: Se você já estava usando o git, pule os 3 primeiros comandos. Se você não estava usando o git, agora pode excluir o .gitattributesarquivo e a .gitpasta.

** Faça backup dos seus arquivos: git rm --cached -reles serão excluídos (embora eles estejam teoricamente no seu repositório git (a pasta .git), que é como eles são restaurados pelo último comando git reset --hard. acima.

gman
fonte
1

Use um editor de texto que entenda as duas terminações de linha, como SciTE ou Notepad ++, se você não precisar converter todas as linhas em todos os seus arquivos, mas não queira ver o arquivo inteiro agrupado na primeira linha.

nelaaro
fonte
Foi o que eles disseram quando tive o problema inverso ao mudar para o Linux. Continuei encontrando ferramentas que tinham problemas com as terminações de linhas erradas. E NADA lida razoavelmente com terminações de linhas mistas.
Matthew Scouten 31/03
@ Matthew Eu sei que o scite lida com as terminações de linha unix / windows corretamente. Eu o uso para esse fim nas janelas vms que corro no linux ao editar arquivos no sistema host.
Nelaaro
Estou certo de que os editores que você recomenda funcionarão perfeitamente. mas em algum momento, precisarei alimentar o arquivo de texto para alguma outra ferramenta, e essa ferramenta NÃO será. Nesse ponto, ter um editor de texto que lide bem com as coisas tornará as coisas piores, ocultando o problema. e aposto que ele ainda lida mal com finais mistos (ou pelo menos com peculiaridades).
Matthew Scouten
11
+1 para a opção do bloco de notas ++ para converter finais de mentira. E aqui está como fazer mais especificamente (consulte o "método 2"): staffwww.fullcoll.edu/brippe/csci123/saveAsUnix.aspx
wip
Notepad ++ já tem as soluções para converter finais de linha, codificações entre outras coisas
phuclv
0

Existem muitas maneiras de traduzir os caracteres eoln nos arquivos TEXT, e todo mundo tem um favorito.

Mas eu sempre transfiro arquivos do Linux para o Windows no modo BINARY, depois abro arquivos TEXT no Windows com um editor capaz de abrir os dois tipos e salvá-los de qualquer forma, se necessário.

Eu usei o Programmers File Editor para isso, mas o Notepad ++ também pode fazê-lo. O WordPad também é útil [pelo menos para exibir arquivos terminados por LF].

Estou pensando nos arquivos de texto simples que podem ter se originado no Linux e precisam ser legíveis no mundo (padrão padrão) do Windows. Não sei ao certo o que você quis dizer com 'arquivos com toque unix'.

pavium
fonte
O problema com esse método é que ele faz apenas um arquivo por vez.
Matthew Scouten 19/11/2009
'arquivos com toque unix' é a minha palavra para arquivos CRLF-LF somente LF e mistos. Depois que um arquivo é editado nas ferramentas unix-oid, ele tende a ser "infectado" com linhas somente LF.
Matthew Scouten 19/11/2009
2
O que eu realmente estava dizendo era que, escolhendo o software certo para visualizar arquivos de texto, eles não precisam ser convertidos. Aliás, evitei levá-lo à tarefa de descrever os arquivos finalizados como CRLF como 'adequados'. Depende inteiramente do seu ponto de vista. Cada método é adequado em seu próprio sistema operacional. Quando um arquivo é movido para um sistema operacional diferente, descobrimos que Win / Mac / Linux são todos diferentes. Eu suspeito que o método Unix / Linux é o método original.
pavium 19/11/09
3
Você suspeita errado. O padrão ASCII foi desenvolvido originalmente para máquinas de teletipo e exigiu CRLF. A maioria dos protocolos da Internet (incluindo HTTP, SMTP, FTP, IRC e muitos outros) também exige terminações CRLF (a maioria das implementações aceita LF nua para compatibilidade com programas Unix não compatíveis). Nesse caso, o Windows está seguindo o padrão e o Unix e o Mac estão quebrando.
Matthew Scouten
0

Para oferecer mais opções (mesmo que eu tenha gostado mais da resposta de hack do user45832 ):

Conversores online

Eu acho que um programa FTP GUI fará isso automaticamente

Linha única em lote / DOS (remove linhas vazias) :

FOR /F "eol= delims= usebackq" %a IN (infile.txt) DO (ECHO %a>> outfile.txt)

PowerShell:

gc infile.txt | %{$_.split("`n")} | Out-File outfile.txt

Tenho os dois últimos daqui

gregg
fonte
0

Obtenha o AWK para Windows .

Converta as terminações de linha Unix em finais de linha do Windows:

awk 'sub("$", "\r")' unixfile.txt > winfile.txt

Converta as terminações de linha do Windows em finais de linha Unix:

awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt

As versões mais antigas de awknão incluem a subfunção Nesses casos, use o mesmo comando, mas substitua awkpor gawkou nawk.

Fonte

Neeme Praks
fonte
0

Na Wikipedia, há uma solução no cmd:

TYPE unix_file | FIND /V "" > dos_file

No PowerShell, existem várias maneiras de fazer isso, revertendo o que foi feito nesta pergunta .

(Get-Content $file -Raw).Replace("`n", "`r`n") | Set-Content $path -Force

(Get-Content $infile) -join "`r`n" > $outfile

$text = [IO.File]::ReadAllText($original_file) -replace "`n", "`r`n"
[IO.File]::WriteAllText($original_file, $text)

Também é possível fazer isso no VBScript e JScript, que também são ferramentas que já estão disponíveis no Windows sem a instalação de um aplicativo de terceiros.

phuclv
fonte
0

Minha distribuição Linux tem dois pequenos utilitários chamados fromdose todosque eu uso para esta tarefa.

nerd
fonte
O OP está pedindo uma ferramenta Windows
phuclv
-2

Eu costumava abrir o arquivo em 'editar' e salvar como o trabalho foi feito ...

Radek
fonte
o que é "editar"? não existe tal ferramenta no windows 10
phuclv
Você pode
usar o seguinte código
obviamente eu usei editno DOS mas esta questão é sobre o Windows
phuclv
11
editcostumava fazer parte do Windows até Windows XP. Minha resposta tem cerca de 8 anos. Nesse tempo editera parte da instalação do Windows em muitos casos ...
Radek