Guía definitiva de dos2unix y unix2dos: conversión de archivos entre Windows y Unix

Última actualización:
Autor:
  • Comprender los distintos formatos de salto de línea en archivos de texto entre sistemas operativos ayuda a evitar incompatibilidades.
  • dos2unix y unix2dos permiten convertir de forma segura archivos de texto entre Windows y Linux/Unix, con múltiples opciones avanzadas para ajustar la conversión a cualquier necesidad.
  • El proceso de conversión abarca no solo los saltos de línea, sino también la gestión de codificaciones, marcas de BOM y enlaces simbólicos, aspectos vitales en entornos modernos.
  • Integrar estos comandos en scripts y automatizaciones facilita la gestión masiva de archivos en entornos mixtos, optimizando el flujo de trabajo entre equipos y servidores.

formato dos unix

¿Alguna vez has tenido que lidiar con archivos de texto que no se ven bien al abrirlos en tu editor favorito en Linux o Windows? Esto suele deberse a las diferencias en los caracteres con los que los distintos sistemas operativos marcan el final de cada línea. Si trabajas en entornos mixtos o colaboras con otras personas que usan sistemas distintos al tuyo, seguro que te has topado más de una vez con este pequeño gran quebradero de cabeza. Por suerte, existen comandos clásicos como dos2unix y unix2dos que te permiten convertir archivos entre los formatos de texto de DOS/Windows y Unix/Linux de forma sencilla.

En el siguiente artículo desglosamos en profundidad todo lo relacionado con los comandos dos2unix y unix2dos. Vamos a repasar desde los conceptos más básicos y teóricos sobre los saltos de línea y las diferencias entre sistemas, hasta un repaso por las opciones más avanzadas de ambos programas, ejemplos detallados de uso, alternativas y trucos para salir de cualquier apuro. Si alguna vez te has preguntado qué hace exactamente cada parámetro o por qué a veces un archivo parece corrompido cuando no lo está, aquí encontrarás la respuesta. Y lo haremos con un lenguaje cercano y ejemplos prácticos, para que quien llegue buscando una solución sepa cómo salir del paso pero también para quien quiera comprender a fondo todo lo que ocurre «bajo el capó».

¿Por qué existen dos2unix y unix2dos?

Cuando se trata de compatibilidad entre sistemas operativos, una de las diferencias más notorias (y, a la vez, más irritantes) es la forma en la que cada uno representa el final de una línea en un archivo de texto. En Unix y Linux, el final de línea se indica con el carácter LF (Line Feed, \n), mientras que en DOS/Windows se utiliza la secuencia CRLF (Carriage Return + Line Feed, \r\n). Para complicar más las cosas, los Mac antiguos (pre-OSX) utilizaban únicamente CR (\r), aunque hoy día se alinean con el formato Unix.

¿Qué ocurre entonces? Si editas un archivo creado en Windows en un editor de texto de Linux, verás a menudo unos molestos ^M al final de cada línea, o el archivo puede no procesarse correctamente por algunos programas. A la inversa, abrir un archivo de Linux en Notepad clásico de Windows puede provocar que el texto aparezca desordenado, como si todo estuviese en una sola línea. Aquí es donde entran en juego dos2unix y unix2dos (y otros equivalentes como fromdos, todos, mac2unix o unix2mac), permitiéndote cambiar del formato de final de línea de un sistema a otro fácilmente.

¿Cómo funcionan dos2unix y unix2dos?

El corazón de ambos comandos es muy simple: convierten los saltos de línea de los archivos de texto entre los formatos DOS/Windows y Unix. dos2unix transforma cualquier final de línea CRLF (\r\n) en solo LF (\n), mientras que unix2dos hace el proceso inverso. También existen variantes para conversiones entre formatos Mac y Unix. Ambos comandos pueden sobreescribir el archivo original o guardar la conversión en un nuevo archivo especificándolo con la opción adecuada. Veamos cómo es el uso básico:

  • Convertir de DOS/Windows a Unix/Linux: dos2unix archivo.txt
  • Convertir de Unix/Linux a DOS/Windows: unix2dos archivo.txt
  • Guardar el resultado en un archivo nuevo: dos2unix -n origen.txt destino.txt

Saltos de línea en los sistemas operativos: una historia de incompatibilidades

Este problema se remonta a las primeras épocas de la informática, cuando cada sistema operativo adoptó convenciones diferentes. En Unix/Linux siempre se ha usado el salto de línea LF (\n). DOS/Windows decidió usar la combinación CRLF (\r\n), siguiendo una convención heredada de las máquinas de escribir. Mac OS clásico (hasta antes de Mac OS X) se decantó por el CR (\r), aunque hoy día los archivos en diferentes formatos todavía generan incompatibilidades.

  • Unix/Linux: cada línea termina con \n (LF).
  • DOS/Windows: cada línea termina con \r\n (CRLF).
  • Mac clásico: cada línea termina con \r (CR).
  Cómo etiquetar a todos en un grupo de Facebook fácilmente

Hoy día, Mac OS X y sus sucesores han adoptado la convención de Unix, usando LF como carácter de fin de línea. Sin embargo, el legado de archivos en formatos mixtos sigue siendo fuente de problemas, sobre todo cuando se transfiere información entre plataformas.

¿Qué hace realmente dos2unix (y unix2dos) con los archivos?

Ambos comandos leen el archivo línea a línea, detectando los finales de línea según el formato de origen, y reescriben el archivo insertando el carácter o secuencia de caracteres de final de línea apropiada para el sistema de destino. Además, según la versión y las opciones usadas, también pueden encargarse de aspectos como la codificación de caracteres (por ejemplo, Unicode), la gestión de archivos con marcas de orden de bytes (BOM), la preservación de fechas o los permisos de archivo.

Opciones y parámetros habituales en dos2unix y unix2dos

Ambos comandos disponen de una amplia gama de parámetros para adaptar su funcionamiento a situaciones concretas. Enumeramos aquí los más frecuentes y su utilidad:

  • -n: Permite especificar el archivo de entrada y el de salida. Ejemplo: dos2unix -n input.txt output.txt. Así puedes conservar el archivo original.
  • -k: Mantiene la fecha de modificación del archivo de salida igual a la del de entrada.
  • -o: Realiza la conversión «in situ», es decir, sobreescribe el archivo original con el resultado.
  • -f: Fuerza la conversión incluso en archivos binarios, aunque esto no suele ser recomendable.
  • -c: Especifica el modo de conversión: ascii (por defecto), 7bit, iso o mac. Por ejemplo, dos2unix -c iso archivo.txt.
  • -b / –keep-bom: Mantiene la marca de orden de bytes (BOM) en archivos Unicode.
  • -m / –add-bom: Añade explícitamente una BOM al archivo de salida.
  • -l / –newline: Añade una línea en blanco adicional tras cada salto de línea convertido.
  • –allow-chown: Permite cambiar el propietario del archivo en algunos sistemas y modos.
  • -h / –help: Muestra la ayuda y termina el programa.
  • -q / –quiet: Activa el modo silencioso para no mostrar mensajes en pantalla.
  • -v / –verbose: Muestra información detallada sobre la conversión.

Estas son solo algunas de las opciones disponibles. La mayoría de versiones modernas de dos2unix/unix2dos incluyen muchas más, sobre todo para tratar temas de codificación, enlaces simbólicos y conversión selectiva según patrones.

Manejo avanzado de codificaciones y Unicode

Uno de los aspectos más problemáticos a la hora de convertir archivos de texto hoy en día tiene que ver con las codificaciones de caracteres. El estándar UTF-8 es el más extendido en Unix/Linux y actualmente también recomendado en Windows, pero existen multitud de archivos en UTF-16, ISO-8859-1, Windows-1252… Las versiones actuales de dos2unix manejan de forma bastante competente la mayoría de estos casos, aunque hay matices importantes a tener en cuenta:

  • Convertir UTF-16 a UTF-8: dos2unix intentará transformar los archivos UTF-16 a UTF-8 (en Windows) o a la codificación local (en Unix/Linux). Si el archivo UTF-16 carece de BOM, puede ser tratado como binario y no ser convertido.
  • Manejo de BOM: En Windows es frecuente tratar con archivos Unicode que tienen una marca de orden de bytes. Dos2unix puede añadirla o eliminarla según las opciones -b y -m.
  • Codificaciones específicas: Mediante los parámetros -iso, -1252, -850, etc., se puede forzar la conversión entre páginas de código concretas, útil si te llega un archivo de un entorno antiguo o de una localización concreta.
  ¿Qué se siente al pagarse a sí mismo primero?

Es importante tener en cuenta que las opciones de conversión de codificación no están diseñadas para modificar archivos binarios, solo archivos de texto plano. Usar dos2unix/unix2dos sobre archivos binarios puede provocar corrupción de datos.

Ejemplos de uso explicados paso a paso

Veamos algunos ejemplos prácticos para ilustrar los casos más comunes y también algunos avanzados:

  • Convertir un archivo y sobreescribir:
    dos2unix documento.txt
    Este comando procesará el archivo, eliminando los caracteres CR de cada línea y escribirá el resultado en el mismo archivo.
  • Generar un nuevo archivo sin modificar el original:
    dos2unix -n entrada.txt salida.txt
    La conversión se guarda en «salida.txt».
  • Convertir varios archivos a la vez:
    dos2unix archivo1.txt archivo2.txt archivo3.txt
  • Forzar la conversión de un archivo que empieza por guión:
    dos2unix -- -foo.txt
  • Convertir archivos recursivamente en un directorio:
    find . -name '*.txt' -print0 | xargs -0 dos2unix
    Esto convertirá todos los archivos .txt de la estructura de carpetas desde el directorio actual hacia abajo.
  • Convertir archivos con codificación específica:
    dos2unix -iso -n origen.txt destino.txt
    Convierte entre una página de códigos DOS y el estándar ISO-8859-1.
  • Detectar y listar qué archivos necesitan ser convertidos:
    dos2unix -ic *.txt
    Muestra solo los archivos que contienen saltos de línea DOS.

¿Qué ocurre con los archivos binarios?

Por defecto, dos2unix e unix2dos ignoran automáticamente los archivos binarios para evitar corruptelas accidentales. Si, por cualquier motivo, necesitas forzar la conversión, puedes utilizar el parámetro -f. Sin embargo, esta práctica no es recomendable porque puede dejar inservibles archivos que no sean estrictamente de texto.

Gestión de enlaces simbólicos y directorios

Por defecto, estos comandos no modifican enlaces simbólicos ni directorios. No obstante, ofrecen opciones como -F (seguir enlaces simbólicos y convertir sus destinos), -R (reemplazar los enlaces simbólicos con los archivos convertidos), o -S (ignorar enlaces simbólicos, que es la opción por defecto).

Opciones para la visualización y depuración

Si quieres saber qué formato tiene un archivo, o cuántos saltos de línea de cada tipo contiene, puedes usar la opción -i (o –info):

  • dos2unix -i archivo.txt muestra información detallada sobre los saltos de línea y el tipo de archivo.

Al añadir ciertos indicadores, puedes obtener información personalizada (por ejemplo, solo archivos con CRLF, solo el número de saltos de tipo Unix, etc.).

Modos de conversión: ascii, iso, 7bit, mac

  • ascii (por defecto): Solo convierte los finales de línea. Es la opción segura para archivos en UTF-8.
  • iso: Realiza conversión entre tablas de códigos DOS y el estándar ISO-8859-1. Útil para archivos antiguos o multidioma.
  • 7bit: Elimina caracteres de 8 bits, útil para sistemas muy antiguos o que requieran compatibilidad extrema.
  • mac: Convierte entre el formato clásico de Mac y Unix.

Estos modos admiten combinación con otras opciones para convertir diferentes tipos de archivos según las necesidades del usuario.

Trabajando con scripts y comandos alternativos

Si tu sistema no tiene instalados dos2unix/unix2dos o necesitas realizar la conversión de forma manual (o en scripts), existen varias alternativas usando comandos clásicos de Unix:

  • Usando sed: sed 's/\r$//' fichero.txt (el ^M se introduce con CTRL+V CTRL+M).
  • En GNU sed moderno: sed 's/\x0D$//' fichero.txt.
  • Convertir de Unix a DOS con sed: sed 's/$/\r/' fichero.txt.
  • Utilizando tr: tr -d '\r' < input.file > output.file.
  • Con Perl: perl -pi -e 's/\r\n/\n/g' input.file.

Estos métodos son útiles cuando no tienes los programas específicos instalados o necesitas una solución rápida en sistemas limitados.

  How one can Allow Night time Shift Mode on Mac

Ejemplos de conversión con diferentes codificaciones

La riqueza de opciones de dos2unix y unix2dos permite manejar escenarios muy variados. Veamos algunos ejemplos que ilustran cómo enfrentarnos a necesidades concretas:

  • De Windows UTF-16 (con BOM) a Unix UTF-8:
    dos2unix -n in.txt out.txt
  • De Windows UTF-16LE (sin BOM) a Unix UTF-8:
    dos2unix -ul -n in.txt out.txt
  • De Unix UTF-8 a Windows UTF-8 (sin BOM):
    unix2dos -m -n in.txt out.txt
  • De Unix UTF-8 a Windows UTF-16:
    unix2dos < in.txt | iconv -f UTF-8 -t UTF-16 > out.txt
  • De Windows 1252 a Unix Latin-1:
    dos2unix -1252 -n in.txt out.txt
  • De Unix Latin-1 a DOS 850:
    unix2dos -850 -n in.txt out.txt

En situaciones donde debas convertir entre páginas de código poco habituales o archivos con caracteres internacionales, puedes combinar dos2unix/unix2dos con otras utilidades como iconv para reconvertir entre diferentes codificaciones antes o después de modificar los saltos de línea.

Conversión masiva y scripts de automatización

Uno de los puntos fuertes de estos comandos es su integración en scripts y entornos automatizados. Si quieres convertir todos los archivos .txt de una carpeta (y subcarpetas), puedes usar los comandos habituales del shell:

  • En Unix: find . -name '*.txt' -print0 | xargs -0 dos2unix
  • En Windows CMD: for /R %G in (*.txt) do dos2unix "%G"
  • En PowerShell: get-childitem -path . -filter '*.txt' -recurse | foreach-object {dos2unix $_.Fullname}

El uso de -print0 y -0 en Unix permite manejar correctamente nombres de archivo con espacios, acentos o comillas.

Variables de entorno y personalización regional

dos2unix/unix2dos permiten ajustar el idioma y la localización empleando varias variables de entorno:

  • LANG: Selecciona el idioma principal. Ejemplo: export LANG=es_ES para español de España.
  • LANGUAGE: Permite una lista de idiomas de preferencia. Ejemplo: LANGUAGE=es:en.
  • DOS2UNIX_LOCALEDIR: Define la ruta de los archivos de idioma del programa.

Estas opciones son especialmente útiles en entornos internacionales o multiusuario.

Mensajes de salida, errores y retorno

Al finalizar, el programa devuelve 0 si todo ha ido bien o 1 si ha habido un fallo no relacionado con el sistema operativo. En modo silencioso (-q), el valor de retorno sigue siendo cero salvo que haya un error en los parámetros o uso incorrecto de las opciones.

Más allá de dos2unix y unix2dos: otras utilidades y documentación

Para casos especiales relacionados con la conversión de archivos de texto puedes consultar otros comandos y programas como file, iconv, find o xargs. Todos ellos se pueden combinar para crear soluciones robustas y totalmente adaptadas a las necesidades de cada proyecto.

Si quieres profundizar más, algunos recursos útiles son:

Instalación de dos2unix/unix2dos en los principales sistemas

En la mayoría de distribuciones de Linux y en entornos Unix se pueden instalar estos comandos fácilmente:

  • Debian/Ubuntu: sudo apt-get install dos2unix
  • CentOS/Red Hat: sudo yum install dos2unix
  • Arch Linux: sudo pacman -S dos2unix

En sistemas como Ubuntu, por ejemplo, si buscas «dos2unix» o «unix2dos» y no los tienes disponibles, bastará con instalar el paquete correspondiente (antes era «sysutils»). En entornos Windows, existen versiones portables o puedes recurrir a emuladores como Cygwin o WSL.

Deja un comentario