Me gustaría copiar un conjunto de archivos del directorio A al directorio B, con la advertencia de que si un archivo en el directorio A es idéntico a un archivo en el directorio B, ese archivo no debe copiarse (y, por lo tanto, su tiempo de modificación no debe ser actualizado). ¿Hay alguna manera de hacerlo con las herramientas existentes, sin escribir mi propio script para hacerlo?
Para elaborar un poco sobre mi caso de uso: estoy autogenerando un montón de .c
archivos en un directorio temporal (por un método que tiene que generarlos incondicionalmente), y cuando los vuelva a generar, me gustaría copiar solo los que han cambiado al directorio de origen real, dejando intactos los que no han cambiado (con sus viejos tiempos de creación) para que make
sepa que no es necesario volver a compilarlos. (Sin .c
embargo, no todos los archivos generados son archivos, así que necesito hacer comparaciones binarias en lugar de comparaciones de texto).
(Como nota: esto surgió de la pregunta que hice en https://stackoverflow.com/questions/8981552/speeding-up-file-comparions-with-cmp-on-cygwin/8981762#8981762 , donde estaba intentando para acelerar el archivo de script que estaba usando para hacer esta operación, pero se me ocurre que realmente debería preguntar si hay una mejor manera de hacerlo que escribir mi propio script, especialmente porque cualquier forma simple de hacerlo en un shell el script invocará algo así como cmp
en cada par de archivos, y comenzar todos esos procesos lleva demasiado tiempo).
rsync -avnc
o a lo largo rsync --archive --verbose --dry-run --checksum
.
diff -qr dirA dirB
para ver qué archivos son únicosdirA
ydirB
, respectivamente.