Cómo reemplazar todo el contenido de una carpeta con otra

23

Tengo carpetas oldy new.

Quiero reemplazar todo el contenido en old/*a new/*. Puede haber muchos subdirectorios en esas carpetas.

Pero puede haber pocos archivos que no están dentro new/*pero sí old/*, así que quiero que se queden como están.

¿Cómo puedo hacer eso desde un shell de Linux?

usuario105919
fuente

Respuestas:

18

rsync probablemente sería una mejor opción aquí. Es tan simple como rsync -a subdir / ./. consulte esta respuesta de unix.stackexchage para obtener mejores soluciones

usar -fcon el cpcomando

cp -fR /source/files /dest

suprimir cp para sobrescribir "prompt ..

Para anular el alias de cp, simplemente puede encerrarlo entre comillas:

 'cp' -rf ./source/* /destination/

Para más información siga estos enlaces:

http://www.wallpaperama.com/forums/cp-command-problems-forcing-overwrite-using-cp-command-t5685.html

http://bytes.com/topic/unix/answers/865372-force-cp-overwrite-existing-directory

Niranjan Singh
fuente
23

Uso rsync. Sincronizará los directorios en una dirección. Entonces, si desea actualizar su oldcarpeta con todo new, pero mantener lo que hay allí, simplemente use:

rsync -avh --dry-run /path/to/new/ /path/to/old/

Esto, en primera instancia, solo generará la lista de archivos que se transferirán. En ese caso: todo lo que se encuentre en él newse copiará old, a menos que ya esté allí. Todo en oldqueda como está.

Si te parece bien, elimina el --dry-runargumento para transmitirlos de verdad.

Las -avhbanderas solo habilitan el modo de archivo (que conservará las marcas de tiempo, etc.), la verbosidad y los tamaños de archivo legibles por humanos. No se eliminará nada del destino a menos que especifique la --deletebandera. Consultar man rsyncpara más información.

slhck
fuente