¿Cómo puedo copiar un subconjunto de archivos de un directorio mientras se preserva la estructura de carpetas?

8

Quiero mover algunos subconjuntos de archivos de dirA a dirB (digamos archivos con "blah" en el nombre del archivo), pero quiero que todos los directorios anidados sean iguales en la nueva ubicación. ¿Cómo puedo hacer eso?

cstack
fuente
posible duplicado del filtro Rsync: copiando solo un patrón
Gilles 'SO- deja de ser malvado'

Respuestas:

9

La magia de rsynclas reglas de filtro:

$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest

Consulte la rsyncpágina de manual para obtener detalles sobre las reglas de filtro, pero aquí está la versión condensada para esta necesidad particular.

--filter="+ */" significa "incluir todo lo que es un directorio"

--filter="-! *blah* significa "excluir todo lo que NO incluye bla en el nombre de archivo"

pdo
fuente
3

Si necesita copiar estos archivos, cp hará:

cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB

La opción --parentsconserva subdirecciones: crea la ruta completa del directorio para el destino.

Joanna Kotuła
fuente
la sintaxis aquí es mucho más clara que rsync
Matěj Šmíd
0

Esto funcionó para mí:

rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" [email protected]:/source/directory/ /destination/directory/

El -econmutador define el rsyncprotocolo de transferencia con el puerto como -p 22. Además, las /barras diagonales finales son importantes para que el programa sepa que se trata de directorios.

¡Gracias @pdo por las horas extra en mi día de trabajo!

Kambiz
fuente