macos – Diferenciar entre dos directorios y mantener solo los que no han cambiado

Pregunta:

Necesito diferenciar dos directorios:

 A: /path1/
 B: /path2/
  1. El directorio A contiene todos los archivos y subdirectorios que también están contenidos en B.
  2. Los archivos en A (y en sus subdirectorios) pueden tener diferentes contenidos de los archivos equivalentes en B.
  3. El directorio A (y sus subdirectorios) también tiene archivos adicionales que no existen en B.

Lo que me gustaría lograr es:

  • Mantenga solo los archivos en A que difieran de los archivos en B más todos los archivos adicionales que no existen en B.
  • Elimine todos los demás archivos en A que no respeten la regla anterior.

Respuesta:

Este enfoque debería funcionar:

cd /path1

find . -type f -exec cmp -s {} /path2/{} \; -delete

Cómo funciona:

  • find . -type f recorre todos los archivos del directorio actual ( A ) y sus subdirectorios.

  • cmp -s {} /path2/{} silenciosamente ( -s ) compara el archivo actualmente procesado ( {} ) con el archivo coincidente en B ( /path2/{} ).

  • Si los archivos son idénticos, cmp devuelve verdadero y la condición -exec coincide.

  • Si la condición -exec coincide, -delete elimina el archivo.

Sugiero reemplazar -delete con -print antes de ejecutar el comando real para verificar si funciona como se esperaba.


Para lidiar con los directorios vacíos sobrantes, puede ejecutar el comando:

find . -type d -exec rmdir -p {} \; 2> /dev/null
  • -type d solo busca directorios.

  • -exec rmdir -p {} \; ejecuta rmdir -p {} para cada directorio que se ha encontrado.

    {} es el directorio que se ha encontrado, y la opción -p hace que rmdir elimine también sus directorios padre vacíos.

  • 2> /dev/null suprime los mensajes de error que surgirán al intentar eliminar directorios no vacíos o eliminados previamente.

Dado que rmdir no puede eliminar directorios que no estén vacíos, esta debería ser la forma más segura.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım