Convertir terminaciones de línea Unix a Windows

38

Recientemente volví a Windows desde Linux. Tengo algunos archivos con CRLF, algunos con LF y algunos que son mixtos. ¿Existe una utilidad que me ayudará a encontrar todos mis archivos tocados con Unix y convertirlos en archivos terminados CRLF adecuados?

La utilidad debe ejecutarse en Windows, no en Linux. Ya me he mudado. Prefiero no instalar Cygwin si puedo evitarlo.

Matthew Scouten
fuente
1
relacionado: vea superuser.com/questions/38744 superuser.com/questions/27060 superuser.com/questions/52044 ... cualquier herramienta mencionada en ellas se puede revertir para lograr lo que quiere hacer
quack quixote
Pregunta duplicado
ukanth
Las soluciones en las llamadas preguntas duplicadas se ejecutan todas en plataformas Linux o preforman la conversión opuesta. Ya no tengo linux. Tengo ventanas
Matthew Scouten
1
Todos están disponibles para Windows a través de Cygwin, GnuWin32, UnxUtils o similares. Creo que hay scripts de Powershell que también pueden hacer esto, aunque no sé lo suficiente para proporcionar enlaces.
quack quijote
1
@quack: La pregunta establece específicamente que el usuario está buscando algo que haga el trabajo en Windows, utilizando una utilidad de Windows.
Brian Lacy

Respuestas:

34

Puede convertirlos con la unix2dosutilidad en su plataforma Linux. También hay unix2dos versiones disponibles para Windows .

Si tiene instalado Perl, también puede usar este revestimiento:

perl -p -e 's/\n/\r\n/' < UNIX_LF.txt > WINDOWS_CRLF.txt
John T
fuente
Hice algo similar a esto, pero usé Python.
Matthew Scouten el
2
@ Matthew Scouten: entonces ... ¡encontraste una utilidad Unix que se ejecuta en Windows! felicidades!
quack quijote
8
si y no. ESCRIBÍ mi propia maldita utilidad. Podría haber hecho esto desde el principio, pero esperaba ahorrar 30 minutos. Lamentablemente no estaba contento con las utilidades disponibles. Lo más cercano que encontré corrompió los archivos binarios en el directorio.
Matthew Scouten el
Hay problemas para convertir con dos2unix y unix2dos; si el archivo tiene CRLF y LF mezclados, puede haber algunas ocurrencias que no se reemplazarían.
pbies
17

Aquí hay una manera fácil y rápida.

Arrastre y suelte el archivo de texto en Chrome (no sé acerca de otros navegadores) y luego corte y pegue nuevamente en el archivo original :)

usuario45832
fuente
2
jeje ... esta respuesta me hizo jajaja
ClintM
Todos los navegadores pueden leer los finales de línea de Unix muy bien, incluido IE. Pero incluso entonces Wordpad también puede hacer eso, y también lo hará el Bloc de notas moderno . Lo que es importante aquí es cómo convertir varios archivos de forma automática
phuclv
10

El que encontré mejor para revisar recursivamente carpetas, permitir filtros de archivos y permitir una simple búsqueda de "\ r \ n" y reemplazarlo solo con "\ n" fue Notepad ++ .

Notepad ++ es uno de los mejores programas de bloc de notas gratuitos y de código abierto para Windows. Es muy simple y poderoso. Manejó la línea que finaliza la búsqueda / reemplazo muy bien. Un contratista verifica un montón de archivos .c y .h en nuestro repositorio con terminaciones de línea Linux \ r \ n, pero como la mayoría de las personas se han estandarizado en las herramientas de compilación de Windows / Eclipse, los archivos no se compilarán hasta que las terminaciones de línea se conviertan .

Mate
fuente
8
Creo que invirtió los finales allí: Linux es \ n, Windows es \ r \ n
Matthew Scouten
10
Notepad ++ también tiene un Edit -> EOL Conversionmenú simple si el número de archivos a convertir es pequeño.
user1071136
8

Usa el cuchillo suizo para archivos .

Por ejemplo: sfk addcr -dir . -file .txt -norec
cambia las terminaciones de LF a CR / LF para Windows, en todos los archivos .txt del directorio actual, pero NO dentro de subdirectorios (sin recursividad).

Pero este programa hace mucho más que eso.

harrymc
fuente
Yo no uso -norecporque quiero recursividad suceda, pero no parece como que
Csaba Toth
6

En Cygwin, puede convertir archivos Unix y "DOS" AKA Windows utilizando dos utilidades integradas:

Convierte a formato DOS CR / LF:

u2d filename

Convertir de nuevo al formato Unix CR:

d2u filename

El archivo se deja en su lugar con el mismo nombre.

¡Disfrutar! Almiar

Rick V
fuente
Esto a veces se llama dos2unixo unix2dosen caso de que no pueda encontrarlo como u2d o d2u. También hayunix2mac
gtatr
3

Voy a lanzar esta solución por ahí. Git hará esto. Ver esta publicación al respecto

Entonces, teóricamente, podrías hacer esto para convertir un árbol completo

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

Cambie crlfa lfsi quiere ir por el otro lado. NOTA: aún no has terminado, sigue leyendo

Escriba git statuspara ver qué archivos se verán afectados. Puede que tenga que agregar líneas como

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

etc para .gitattributesevitar la conversión de ciertos archivos. También puede marcar explícitamente ciertos archivos como texto

*.md text
*.css text

Luego solo repita estas 2 líneas después de haber editado .gitattributes

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

Luego, use git statusnuevamente para ver qué archivos se cambiarán. Cuando esté seguro de que todos los archivos que desea afectar se enumeran para git statusluego confirmar

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

ahora revise todos los archivos nuevamente

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

Ahora deberían tener cualesquiera que sean sus finales de línea deseados

** NOTA: Si ya estaba usando git, omita los primeros 3 comandos comandos de git. Si no estaba usando git ahora puede eliminar el .gitattributesarchivo y la .gitcarpeta.

** Haga una copia de seguridad de sus archivos: los git rm --cached -relimina a todos (aunque en teoría están en su repositorio de git (la carpeta .git), así es como se restauran con el último comando git reset --hard. Es solo que, dado que los archivos se eliminan, probablemente sea mejor respaldarlos arriba.

gman
fuente
1

Use un editor de texto que comprenda ambas terminaciones de línea como SciTE o Notepad ++ si no necesita convertir todas las líneas que terminan en todos sus archivos, pero simplemente no quiere ver todo el archivo agrupado en la primera línea.

nelaaro
fuente
Eso es lo que dijeron cuando tuve el problema inverso al cambiar a Linux. Seguí encontrándome con herramientas que tenían problemas con las terminaciones de línea incorrectas. Y NADA maneja terminaciones de línea mixtas razonablemente.
Matthew Scouten
@Matthew Sé que el scite maneja las terminaciones de línea de Unix / Windows correctamente. Lo uso para ese propósito en Windows vms que ejecuto en Linux cuando edito archivos en el sistema host.
nelaaro 01 de
Estoy seguro de que los editores que recomiendas funcionarán bien. pero en algún momento, necesitaré alimentar el archivo de texto a alguna otra herramienta, y esa herramienta NO lo hará. En ese momento, tener un editor de texto que maneje bien las cosas empeorará al ocultar el problema. y apuesto a que todavía maneja mal las terminaciones mixtas (o al menos con peculiaridades).
Matthew Scouten 01 de
1
+1 para la opción notepad ++ para convertir finales de mentiras. Y aquí es cómo hacer más específicamente (ver "Método 2"): staffwww.fullcoll.edu/brippe/csci123/saveAsUnix.aspx
WIP
Notepad ++ ya tiene las soluciones para convertir finales de línea, codificaciones, entre otras cosas
phuclv
0

Hay muchas formas de traducir los caracteres Eoln en archivos TEXT, y todos tienen un favorito.

Pero siempre transfiero archivos de Linux a Windows en modo BINARIO, luego abro archivos TEXT en Windows con un editor capaz de abrir ambos tipos y guardarlos en cualquier forma, si es necesario.

Usé Programmers File Editor para esto, pero Notepad ++ también puede hacerlo. WordPad también es útil [al menos, para ver archivos terminados en LF].

Estoy pensando en los archivos de texto simples que pueden haberse originado en Linux y que deben ser legibles en el mundo (estándar de facto) de Windows. No estoy seguro de lo que quisiste decir con 'archivos tocados con Unix'.

pavium
fuente
El problema con este método es que solo hace un archivo a la vez.
Matthew Scouten el
'archivos tocados con Unix' es mi palabra para archivos CRLF-LF solo y LF mixtos. Una vez que un archivo ha sido editado en herramientas unix-oid, tiende a 'infectarse' con líneas de solo LF.
Matthew Scouten el
2
Lo que realmente estaba diciendo era que al elegir el software adecuado para ver archivos de texto, no es necesario convertirlos. Por cierto, evité llevarlo a la tarea de describir los archivos terminados CRLF como 'adecuados'. Depende completamente de tu punto de vista. Cada método es apropiado en su propio sistema operativo. Cuando un archivo se mueve a un sistema operativo diferente, encontramos que Win / Mac / Linux son todos diferentes. Sospecho que el método Unix / Linux es el original.
Pavium el
3
Sospechas mal. El estándar ASCII se desarrolló originalmente para máquinas de teletipo y requería CRLF. La mayoría de los protocolos de Internet (incluidos HTTP, SMTP, FTP, IRC y muchos otros) también requieren terminaciones CRLF (la mayoría de las implementaciones aceptan LF simple para compatibilidad con programas Unix no compatibles). En este caso, Windows sigue el estándar y Unix y Mac lo están rompiendo.
Matthew Scouten
0

Para ofrecer más opciones (aunque disfruté mejor la respuesta de hackeo de user45832 ):

Convertidores en línea

Supongo que un programa FTP GUI lo hará automáticamente

Batch / DOS one-liner (elimina líneas vacías) :

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

Potencia Shell:

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

Tengo los dos últimos de aquí

Gregg
fuente
0

Obtén AWK para Windows .

Convierta las terminaciones de línea de Unix en terminaciones de línea de Windows:

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

Convierta las terminaciones de línea de Windows en terminaciones de línea Unix:

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

Las versiones anteriores de awkno incluyen la subfunción. En tales casos, use el mismo comando, pero reemplace awkcon gawko nawk.

Fuente

Neeme Praks
fuente
0

En Wikipedia hay una solución en cmd:

TYPE unix_file | FIND /V "" > dos_file

En PowerShell hay varias formas de hacerlo invirtiendo lo que se hizo en esta pregunta .

(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)

También es posible hacer esto en VBScript y JScript, que también son herramientas que ya están disponibles en Windows sin instalar una aplicación de terceros.

phuclv
fuente
0

Mi distribución de Linux tiene dos pequeñas utilidades llamadas fromdosy todosque uso para esta tarea.

friki
fuente
El OP está pidiendo una herramienta de Windows
phuclv
-2

Solía ​​abrir el archivo en 'editar' y guardarlo ya que el trabajo estaba hecho ...

Radek
fuente
¿Qué es "editar"? no existe tal herramienta en windows 10
phuclv
obviamente lo he usado editen DOS, pero esta pregunta es sobre Windows
phuclv
1
editsolía ser parte de Windows hasta Windows XP. Mi respuesta es de unos 8 años. En ese momento editfue parte de la instalación de Windows en muchos casos ...
Radek