Actualmente estoy usando rsync
un script que implementa una aplicación PHP desde una puesta en escena a un servidor de producción. Aquí es cómo:
rsync -rzai --progress --stats --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/
Actualmente, esto genera una lista de cada archivo que se está comparando (cada archivo del proyecto), pero me gustaría que solo muestre los modificados, por lo que puedo ejecutarlo con una --dry-run
opción para verificar que cada implementación solo actualice archivos deseados
NOTA: Lo mejor que puedo hacer hasta ahora son grep fcst
los resultados, pero estoy buscando una rsync
opción que estoy seguro de que está allí, pero no la encuentro en las páginas del manual.
¡Gracias por adelantado!
-P
progreso hace exactamente eso en la-n
configuración de ejecución en seco, aunque-i
tampoco está mal. Vea mi respuesta a continuación.Usa la
--out-format
opciónSegún la página del manual:
Si solo necesita los nombres de archivo reales (
--out-format="%n"
), su comando de ejecución en seco podría verse así:rsync -rzan --out-format="%n" --ignore-times --checksum /tmp/app_export/ [email protected]:/var/www/html/app/
Cuando se llama a rsync con
-v
, utiliza internamente esta opción con un formato predeterminado de"%n%L"
, que le indica solo el nombre del archivo y, si el elemento es un enlace, dónde apunta.Pero esto también incluye un breve resumen al principio y al final del proceso de sincronización.
Para deshacerse de ese resumen, use la
--out-format
opción directamente.Por cierto.
-i
También utiliza internamente--out-format
, pero con un formato de"%i %n%L"
.fuente
A partir de rsync v3.1.0, lanzado en 2013, existe el
--info
indicador que permite un control detallado sobre la salida.Las
--info
banderas disponibles son:fuente
No estoy seguro si esto difiere entre las versiones / opciones utilizadas, pero en mi versión cuando uso la
-i
opción obtengo una lista como:Entonces, una solución simple para obtener solo una lista de archivos realmente transferidos simplemente se ejecuta:
Esto simplemente ocultará todas las líneas que contengan
f..T......
. Así que efectivamente esto ocultará archivos idénticos.fuente
En realidad, respondiste tu propia pregunta, ya que tu comando original ya la tiene:
--progress
Esta es la opción correcta, aunque la página del manual es un poco críptica al respecto:
Tiene un poco de sentido, ya que invoca su
rsync
cadena con el modo de ejecución en seco, no ocurre ningún transer, pero aún tendría progreso: es decir, los archivos que han cambiado y se transferirán.De esta manera obtienes una pequeña lista de todos los archivos, por ejemplo:
El destino ya tiene una copia del archivo modificado que se actualizó en el archivo fuente y antiguo, que permanece sin cambios. La fuente también tiene un archivo adicional: newfile.
Si luego invocamos su comando rsync, pero eliminamos los elementos
-i
y simplemente agregamos dryrun-n
Obtiene una lista de solo los archivos que rsync podría transferir: archivo cambiado y archivo nuevo.
fuente