Normalmente lo hago rsync -n
antes 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 rsync
que haría, mi idea sería tomar esa salida, procesarla y, de alguna manera, hacer rsync
solo --include-from
esa 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-run
comando 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.rsync
pero 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
rsync
salida hacia adentrohead
y 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.txt
Finalmente, indique
rsync
que use el archivo de inclusión generado (agregando opciones adicionales según lo desee):rsync --include-from=include.txt --exclude=* source/ dest/
fuente
tail
/head
lo suficientemente robusto como para garantizar tener solo la lista de archivos?--delete
hace 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
/ porhead
completo.rsync
interpreta 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).