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?
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?
Respuestas:
La magia de rsync
las reglas de filtro:
$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest
Consulte la rsync
pá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"
Si necesita copiar estos archivos, cp hará:
cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB
La opción --parents
conserva subdirecciones: crea la ruta completa del directorio para el destino.
Esto funcionó para mí:
rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" uid@555.55.555.55:/source/directory/ /destination/directory/
El -e
conmutador define el rsync
protocolo 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!