Normalmente lo hago rsync -nantes de hacer un real rsync. La cuestión es, ¿cómo podría automatizar la segunda ejecución para reutilizar exactamente la lista generada con --dry-run?
Quiero decir, si corro rsync -n, obtengo una simulación de lo rsyncque haría, mi idea sería tomar esa salida, procesarla y, de alguna manera, hacer rsyncsolo --include-fromesa salida, por lo que la lista completa solo debe calcularse una vez.
Si esto no tiene sentido, por favor, avíseme.
Por cierto, tiendo a usar rsync -hva --progress --stats --delete --exclude-from "$EXCLUDEFILE". Si también tiene una sugerencia sobre qué opciones usaría, hágamelo saber. Estoy tratando de duplicar el contenido de un disco duro externo (que solo contiene imágenes, videos y documentos) a otro disco duro externo.
fuente

--dry-runcomando a un archivo (por ejemplo,rsync --dry-run -avz SOURCE DEST > include.txt), eliminar todas las líneas que no son archivos / rutas de include.txt y ejecutarlasrsync --include-from include.txt.rsync --include-from include.txt --exclude=* SOURCE DEST. Consulte stackoverflow.com/a/19296415/1765910 para más detalles.rsyncpero no sé nada de scripts de shell / bash ...Respuestas:
Ciertamente es posible usar la lista de archivos generada durante una ejecución en seco como un archivo de inclusión. Sin embargo, idealmente, las líneas adicionales en la parte superior e inferior de la salida de ejecución en seco deberían eliminarse.
Salida de ejemplo:
Para eliminar estas líneas, canalice la
rsyncsalida hacia adentroheady hacia adentrotail. Luego, guarde la salida procesada en un archivo de inclusión:rsync --dry-run -avz source/ destination/ | head --lines=-3 | tail --lines=+3 > include.txtFinalmente, indique
rsyncque use el archivo de inclusión generado (agregando opciones adicionales según lo desee):rsync --include-from=include.txt --exclude=* source/ dest/fuente
tail/headlo suficientemente robusto como para garantizar tener solo la lista de archivos?--deletehace que los archivos eliminados de los directorios de origen también se eliminen de los directorios de destino, al menos en la computadora en la que lo probé. Puede omitir la partetail/ porheadcompleto.rsyncinterpreta cada línea en el archivo de inclusión como un nombre de archivo y simplemente ignora los archivos no existentes, por lo que no sucederá nada si mantiene las líneas adicionales (a menos que tenga archivos llamados "envío de lista de archivos incrementales", etc., en cuyo caso estos archivos también se copiarán).