Busque y reemplace todos los mismos archivos entre 2 directorios

Busque y reemplace todos los mismos archivos entre 2 directorios

Quiero encontrar todos los archivos que dir1tengan los mismos nombres de archivo correspondientes dir2y reemplazarlos con los archivos de dir2.

Por ejemplo:

dir1: first.txt second.txt
dir2: third.txt first.txt

Así que quiero eliminarlo del archivo dir1antiguo first.txty reemplazarlo first.txtcon dir2.

¿Cómo lograr esto usando la terminal Bash?

Respuesta1

En realidad, hay un único comando que hace exactamente lo que estás pidiendo.

rsync -av --existing dir2/ dir1/

Esto copiará recursivamente los archivos de dir2 a dir1 solo si el archivo ya existe en dir1.

Las -avopciones son las opciones que normalmente usarás para copiar archivos usando rsync.

La --existingopción indica rsyncque se omita la creación de nuevos archivos en el receptor.

Debe tener la barra diagonal final en dir2/ en la línea de comando porque rsyncse comporta de manera diferente a la mayoría de los comandos en la barra diagonal y tiene un significado para rsync.

rsyncTambién se puede utilizar a través de la red de forma similar a scp.

rsyncpuede manejar muchos otros tipos de tareas de sincronización, actualización y copia de seguridad de archivos.

Respuesta2

rsync puede hacer esto con la --existingopción:

rsync -v --existing dir2/* dir1/

información relacionada