centos - servidores - Cómo usar Rsync para copiar solo subdirectorios específicos(los mismos nombres en varios directorios)
rsync no se encontró la orden (2)
Tengo tal estructura de directorios en el servidor 1:
- datos
- empresa1
- unique_folder1
- otra carpeta
- ...
- compañia2
- unique_folder1
- ...
- ...
- empresa1
Y quiero duplicar esta estructura de carpetas en el servidor 2, pero copiar solo directorios / subdirectorios de unique_folder1. Es decir, como resultado debe ser:
- datos
- empresa1
- unique_folder1
- compañia2
- unique_folder1
- ...
- empresa1
Sé que rsync
es muy bueno para esto. He intentado opciones ''incluir / excluir'' sin éxito.
Por ejemplo, he intentado:
rsync -avzn --list-only --include ''*/unique_folder1/**'' --exclude ''*'' -e ssh [email protected]:/path/to/old/data/ /path/to/new/data/
Pero, como resultado, no veo ningún archivo / directorio:
receiving file list ... done
sent 43 bytes received 21 bytes 42.67 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
Que pasa Ideas?
Información adicional: Tengo acceso sudo a ambos servidores. Una idea que tengo es usar el comando de find
y cpio
juntos para copiar en el nuevo directorio con el contenido que necesito y luego usar Rsync
. Pero esto es muy lento, hay muchos archivos, etc.
He encontrado la razón. En cuanto a mí, no estaba claro que Rsync
funcione de esta manera.
Por lo tanto, el comando correcto (solo para el directorio de la compañía1) debe ser:
rsync -avzn --list-only --include ''company1/'' --include ''company1/unique_folder1/***'' --exclude ''*'' -e ssh [email protected]:/path/to/old/data/ /path/to/new/data
Es decir, necesitamos incluir el directorio de cada company
matriz. Y, por supuesto, no podemos escribir manualmente todos estos directorios de company
en la línea de comandos, por lo que guardamos la lista en el archivo y la usamos.
Cosas finales que tenemos que hacer:
1.Generar el archivo de inclusión en el servidor 1, por lo que su contenido será (he usado ls
y awk
):
+ company1/
+ company1/unique_folder1/***
...
+ companyN/
+ companyN/unique_folder1/***
2.Copie include.txt al servidor 2 y use dicho comando:
rsync -avzn /
--list-only /
--include-from ''/path/to/new/include.txt'' /
--exclude ''*'' /
-e ssh [email protected]:/path/to/old/data/ /
/path/to/new/data
Si el primer patrón coincidente excluye un directorio, nunca se recorrerán todos sus descendientes. Cuando desea incluir un directorio profundo, por ejemplo, company*/unique_folder1/**
pero excluye todo lo demás *
, debe indicar a rsync que incluya a todos sus ancestros también:
rsync -r -v --dry-run /
--include=''/'' /
--include=''/company*/'' /
--include=''/company*/unique_folder1/'' /
--include=''/company*/unique_folder1/**'' /
--exclude=''*''
Puede usar la expansión de refuerzo de bash para guardar algo de escritura. Después de la expansión de llaves, el siguiente comando es exactamente el mismo que el anterior:
rsync -r -v --dry-run --include=/{,''company*/''{,unique_folder1/{,''**''}}} --exclude=''*''