TL, DR:
rsync -am --include='*.pdf' --include='*/' --exclude='*' ~/LaTeX/ ~/Output/
Rsync copia las fuentes en el destino. Si pasa *.pdfcomo fuentes, el shell expande esto a la lista de archivos con la .pdfextensión en el directorio actual. No ocurre un recorrido recursivo porque no pasó ningún directorio como fuente.
Por lo tanto, debe ejecutar rsync -a ~/LaTeX/ ~/Output/, pero con un filtro para indicarle a rsync que .pdfsolo copie archivos. Las reglas de filtro de Rsync pueden parecer desalentadoras cuando lee el manual, pero puede construir muchos ejemplos con solo unas pocas reglas simples.
Inclusiones y exclusiones:
- Exclusión de archivos por nombre o por ubicación es fácil:
--exclude=*~, --exclude=/some/relative/location(en relación con el argumento de origen, por ejemplo, se incluyen las siguientes ~/LaTeX/some/relative/location).
- Si solo desea hacer coincidir algunos archivos o ubicaciones, inclúyalos, incluya todos los directorios que conduzcan a ellos (por ejemplo, con
--include=*/) y luego excluya el resto con --exclude='*'. Esto es porque:
- Si excluye un directorio, esto excluye todo lo que está debajo de él. Los archivos excluidos no serán considerados en absoluto.
- Si incluye un directorio, esto no incluye automáticamente su contenido. En versiones recientes,
--include='directory/***'lo haremos.
- Para cada archivo, se aplica la primera regla de coincidencia (y se incluye todo lo que nunca coincida).
Patrones:
- Si un patrón no contiene un
/, se aplica al nombre del archivo sin directorio.
- Si un patrón termina con
/, se aplica solo a los directorios.
- Si un patrón comienza con
/, se aplica a toda la ruta desde el directorio que se pasó como argumento a rsync.
*cualquier subcadena de un solo componente de directorio (es decir, nunca coincide /); **coincide con cualquier subcadena de ruta.
Si un argumento fuente termina con a /, su contenido se copia ( rsync -r a/ bcrea b/foopara cada a/foo). De lo contrario, el directorio en sí se copia ( rsync -r a bcrea b/a).
Por lo tanto, aquí debemos incluir *.pdf, incluir directorios que los contengan y excluir todo lo demás.
rsync -a --include='*.pdf' --include='*/' --exclude='*' ~/LaTeX/ ~/Output/
Tenga en cuenta que esto copia todos los directorios, incluso los que no contienen ningún archivo coincidente o subdirectorio que contenga uno. Esto se puede evitar con la --prune-empty-dirsopción (no es una solución universal, ya que no puede copiar un directorio ni siquiera haciendo coincidirlo explícitamente, pero ese es un requisito poco frecuente).
rsync -am --include='*.pdf' --include='*/' --exclude='*' ~/LaTeX/ ~/Output/
**patrón de zsh ) debería funcionar, sin embargo.