
Para un proyecto de PNL necesito una copia de la biblioteca del Proyecto Gutenberg. Ahora, el proyecto permite la descarga de sus archivos, especialmente si es para fines de duplicación (estoy planeando configurar uno eventualmente), pero para mi trabajo solo necesito un subconjunto específico de los archivos presentes.
Los directorios en la fuente están organizados así:
|
| - 1 - |
| |- 1
| |- 2
| |...
| - 2
| .
| .
| .
| - 9
| - cache
| - retired
| ...
Los únicos directorios que me interesan son los numerados, y el único tipo de archivo que me interesa es .txt
. Tampoco quiero archivos que terminen en -8.txt
o -h.txt
, pero estoy dispuesto a tolerarlos por ahora.
Hasta ahora lo he probado:
--include "*/" --include "*.txt" --exclude "cache" --exclude "images" --exclude "retired" --exclude "pg" --exclude "*-8.txt" --exclude "*"
<- este todavía se encuentra en la carpeta "caché", ya que también contiene algunos.txt
archivos--include "*/" --include "*.txt" -f'- *\-8.txt' -f'- *\-h.txt' -f'- cache/**' --exclude "cache" --exclude "images" --exclude "retired" --exclude "pg" --exclude "*"
<- más o menos lo mismo
El problema parece ser el siguiente:
- necesito excluirtodo, ya que hay un conjunto extremadamente limitado de cosas que necesito
- Incluyo los directorios numerados, ya que eso es todo lo que necesito.
- La inclusión
*.txt
rompe las exclusiones anteriores, porque otros directorios también contienen archivos de texto.
¿Cómo haría esto?
Respuesta1
De la publicación rsync: excluye todos los directorios excepto unos pocos, cito del respuesta de Darryl E. Clarke:
Un simple filtro debería funcionar. Para aprovechar la respuesta anterior con un ejemplo adecuado: incluya explícitamente los archivos principales, además de todas las subcarpetas y archivos (**). Luego excluya todo lo demás. Aquí está
filter.txt
:+ /include_this_dir/ + /include_this_dir/** + /include_that_dir/ + /include_that_dir/** - /** With the command line: rsync -av --dry-run --filter="merge filter.txt" source_dir/ dest_dir/
Resultaría en:
sending incremental file list created directory dest_dir ./ include_that_dir/ include_that_dir/somefile.txt include_that_dir/subdir/ include_this_dir/ sent 202 bytes received 65 bytes 534.00 bytes/sec total size is 0 speedup is 0.00 (DRY RUN)
Añade a esto tu filtro de *.txt
.
En otras palabras: primero incluya, luego excluya todo.
Respuesta2
Podrías hacer coincidir explícitamente los directorios numerados con el globo [0-9]/
:
-f'+ [0-9]/' \
-f'- *-[8h].txt' \
-f'+ *.txt' \
-f'- *' \
Si los números son superiores a 9, quizás también sea suficiente sumar -f'+ [0-9][0-9]/
o .-f'+ [0-9]*/