Es un problema francamente interesante. Parece sencillo, pero teniendo en cuenta las limitaciones en el número y frecuencia de llamadas a la API y, sobre todo, en el tiempo máximo de ejecución de un script (6 minutos en cuentas personales, 30 en G Suite), la cosa se complica bastante, especialmente cuando se procesan de manera recursiva subcarpetas con un nivel indeterminado de profundidad. Para resolverlo de manera robusta es necesario recurrir a mecanismos basados en activadores por tiempo para dividir el proceso en bloques de ejecución dentro de los límites que fijan las cuotas de servicio y retomar la ejecución desde el último archivo procesado en caso de error / límite de tiempo. @Carlos Sánchez Martín9 no he examinado detenidamente el código de GitHub que enlazas, pero así a primera vista diría que no tiene todo esto en cuenta. ¿Lo has llegado a probar en esas circunstancias?
La implementación más robusta que he encontrado hasta el momento es la de CopyFolder28. Sirve para hacer backups de carpetas enteras, pero lógicamente para ello debe primero recorrerlas. Aquí32 el código.