Copie recursivamente todos los archivos de un directorio a otro con excepciones

8

¿Cómo necesito copiar todos los archivos excepto un par de directorios de un directorio a otro? por ejemplo:

cp -R test /www/test2 would copy all

Pero quiero excluir 2 carpetas llamadas log y logs.

Intenté algo como:

find ~test -not -name logs,log |  cp -R test /www/test2 

¿Pero me pueden ayudar con la sintaxis?

Micheal
fuente

Respuestas:

10

Use rsync:

rsync -a --exclude=logs --exclude=log from/ to/
bobah
fuente
¡el rynsc me funcionó genial!
Micheal
rsync es ahora mi nuevo amigo :) Gracias, la explicación es ordenada
Aleks
2

Creo que estás buscando algo como:

find dir -type d ! \( -name 'log' -o -name 'logs' \) | xargs -I{} cp -R {} /www/test2/{}
Tim Pote
fuente
@sputnick ve mis cambios. Siéntase libre de ofrecer el emacs regex para esto si lo sabe.
Tim Pote
0

Si usa :

shopt -s extglob
cp -R test/!(log|logs) /www/test2

Ver http://wiki.bash-hackers.org/syntax/pattern

Gilles Quenot
fuente
¿Qué sucede cuando la estructura es así test/someotherdir/logs? OP nunca dijo logy logsfue el segundo directorio más alto.
Tim Pote
Si vuelve a leer el comando OP, el find ~test -not -name logs,logregistro y los registros deben ser un subdirectorio.
Gilles Quenot
findmira recursivamente a través de todos los subdirectorios. File globbing no lo hace. Para que su respuesta funcione, logy logstendría que ser subdirectorios inmediatos de test.
Tim Pote