---
title: "Cómo Comparar el Contenido de Dos Carpetas y Ver los Archivos Diferentes en la Terminal"
description: "Aprende a comparar dos carpetas y ver los archivos diferentes en la terminal de Linux o macOS"
date: 2023-11-14
categories: ["linux"]
tags: ["linux"]
---

Si tienes dos carpetas que contienen archivos similares, quizá quieras compararlas y ver cuáles son las diferencias. Por ejemplo, puedes tener una carpeta de copia de seguridad que debería ser idéntica a tu carpeta original, pero no estás seguro de si están sincronizadas. O quizá tengas dos versiones de un proyecto que quieras fusionar o actualizar.

En mi caso, necesitaba comprobar los archivos diferentes entre dos repositorios: contraté a alguien para que me ayudara con algunos problemas de este sitio web en Astro.js y me entregó un archivo zip con el código terminado. Necesitaba ver cuáles eran los archivos modificados para poder entender qué había cambiado.

En este artículo aprenderás a comparar el contenido de dos carpetas y a ver los archivos diferentes en la terminal usando algunos comandos sencillos. Esto se puede hacer en la terminal y funciona en macOS o Linux; en Windows también puede funcionar, pero necesitas el subsistema de Windows para tener acceso al comando.

Al final de este artículo, podrás comparar cualquier par de carpetas y averiguar qué archivos se han añadido, eliminado, modificado o permanecen sin cambios.

## Compara el Contenido de Dos Carpetas y Ve los Archivos Diferentes en la Terminal

El comando **diff** es una utilidad de línea de comandos que compara dos archivos o directorios línea a línea y muestra las diferencias entre ellos. También te indica qué cambios necesitas hacer en un archivo o directorio para que coincida con el otro. La sintaxis básica del comando diff es:

```bash
diff [options] file1 file2
```

o

```bash
diff [options] dir1 dir2
```

Para comparar dos directorios, necesitas usar la opción -rq

```bash
diff -rq dir1 dir2
```

- **-r** es la opción recursiva. Le indica al comando diff que compare todos los archivos y subdirectorios dentro de los directorios especificados. Por ejemplo, si tienes dos directorios llamados dir1 y dir2, puedes compararlos ejecutando:

- **-q** hace que la salida sea más concisa y legible; es la opción «brief» (resumida). Le indica al comando diff que solo informe cuando los archivos difieren, sin mostrar los detalles de las diferencias. Por ejemplo, si ejecutas:

```bash
diff -rq  /Users/dbalota/websites/bitdoze-astro-bkw  /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze
```

La salida se verá algo así:

```bash
Only in /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src: .DS_Store
Only in /Users/dbalota/websites/bitdoze-astro-bkw/src/assets/favicons: Grammarly.c8npGa4ajbhi8fee1ud80d82.dmg
Only in /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/assets/favicons: favicon.ico
Only in /Users/dbalota/websites/bitdoze-astro-bkw/src/assets/favicons: favicon.png
Only in /Users/dbalota/websites/bitdoze-astro-bkw/src/assets/favicons: favicon.svg
Files /Users/dbalota/websites/bitdoze-astro-bkw/src/config/menu.json and /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/config/menu.json differ
Files /Users/dbalota/websites/bitdoze-astro-bkw/src/content/posts/add-accordion-carrd.mdx and /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/content/posts/add-accordion-carrd.mdx differ
Only in /Users/dbalota/websites/bitdoze-astro-bkw/src/content/posts: compare-folders-content-differences.mdx
Files /Users/dbalota/websites/bitdoze-astro-bkw/src/content/posts/opnform-open-source.mdx and /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/content/posts/opnform-open-source.mdx differ
Only in /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/layouts: .DS_Store
Files /Users/dbalota/websites/bitdoze-astro-bkw/src/layouts/Base.astro and /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/layouts/Base.astro differ
Files /Users/dbalota/websites/bitdoze-astro-bkw/src/layouts/PostSingle.astro and /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/layouts/PostSingle.astro differ
Files /Users/dbalota/websites/bitdoze-astro-bkw/src/layouts/Posts.astro and /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/layouts/Posts.astro differ
Only in /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/layouts/components: .DS_Store
Files /Users/dbalota/websites/bitdoze-astro-bkw/src/layouts/components/SimilarPosts.astro and /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/layouts/components/SimilarPosts.astro differ
Files /Users/dbalota/websites/bitdoze-astro-bkw/src/layouts/components/widgets/Button.astro and /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/layouts/components/widgets/Button.astro differ
Files /Users/dbalota/websites/bitdoze-astro-bkw/src/layouts/partials/Footer.astro and /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/layouts/partials/Footer.astro differ
Files /Users/dbalota/websites/bitdoze-astro-bkw/src/pages/[regular].astro and /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/pages/[regular].astro differ
Files /Users/dbalota/websites/bitdoze-astro-bkw/src/pages/authors/[single].astro and /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/pages/authors/[single].astro differ
Files /Users/dbalota/websites/bitdoze-astro-bkw/src/styles/base.scss and /Users/dbalota/Desktop/orange-facturi/easypanel/bitdoze/src/styles/base.scss diffe
```

En la salida anterior puedes ver que te muestra exactamente qué archivos son diferentes.

## Mejora el Comando Diff y Filtra los Resultados

Una forma de filtrar la salida del comando diff es usar el comando grep, que puede buscar un patrón en la entrada e imprimir solo las líneas coincidentes. Por ejemplo, si queremos comparar dos directorios, dir1 y dir2, y excluir un archivo concreto de la comparación, podemos usar el siguiente comando:

```bash
diff -rq dir1 dir2 | grep -v <file>
```

El símbolo de tubería (|) redirige la salida del comando diff a la entrada del comando grep. La opción **grep -v** le indica a grep que invierta la coincidencia, es decir, que imprima solo las líneas que no contienen el patrón. El patrón es el nombre del archivo que queremos excluir, entre corchetes angulares. Por ejemplo, si queremos excluir el archivo README.md, podemos usar:

Otra forma de filtrar la salida del comando diff es usar la opción **grep -i**, que le indica a grep que ignore las mayúsculas y minúsculas del patrón. Esto puede ser útil si queremos comparar dos directorios y encontrar los archivos que tienen el mismo nombre pero con distinto uso de mayúsculas. Por ejemplo, si queremos comparar dir1 y dir2 y encontrar los archivos con el nombre file.txt, sin importar las mayúsculas, podemos usar el siguiente comando:

```bash
diff -rq dir1 dir2 | grep -i file.txt
```

La opción grep -i le indica al comando grep que haga coincidir el patrón file.txt en cualquier combinación de mayúsculas y minúsculas, como File.txt, FILE.TXT o fiLe.TxT. Por ejemplo, si dir1 contiene File.txt y dir2 contiene file.txt, el comando imprimirá:

Files dir1/File.txt and dir2/file.txt differ

Al usar estos filtros, podemos mejorar el comando diff y hacerlo más flexible y potente para nuestros propósitos.

## Conclusiones

Así de fácil es comparar dos carpetas con subdirectorios y ver exactamente qué archivos son diferentes: con la terminal de Linux o macOS no necesitas ninguna aplicación aparte del comando diff. Puedes mejorar el comando con grep para encontrar exactamente lo que te interesa y también puedes usar la opción **-u** para ver los cambios exactos.