Python · Google Drive ↔ OneDrive · Ghid tehnic open-source
Creați în Python un transfer sigur între Google Drive și OneDrive
Acest ghid transformă o copiere în cloud înșelător de dificilă într-un flux explicit: inventariere, verificări preliminare, stocare intermediară, calcularea hashului, încărcare, redescărcare, comparare, salvarea punctului de control și abia apoi eliberarea spațiului local pe disc.
Actualizat ; 22 min de lectură.
Pe scurt
Pentru o migrare gestionată, FileArk automatizează acest flux de lucru fără ca datele să treacă prin computerul dvs. A fost testat cu sarcini de migrare de mai mulți terabyți și verifică primirea datelor de la sursă, acceptarea încărcării de către furnizor și obiectul de la destinație înainte de a raporta succesul. Dacă trebuie să operați personal fluxul, programul Python de mai jos, cu licență MIT, efectuează o copiere prudentă prin computerul dvs. și nu șterge niciodată fișierele sursă.
Alegeți modelul operațional înainte de a alege codul
Un serviciu de migrare directă între servicii cloud este alegerea practică atunci când biblioteca este mare, conexiunea trebuie să ruleze nesupravegheat sau datele nu ar trebui să treacă printr-un laptop. FileArk menține transferul online, monitorizează răspunsurile furnizorilor, reîncearcă operațiunile în cazul erorilor recuperabile și vă oferă o singură vizualizare a progresului. Procesul său de validare efectuează trei verificări independente înainte ca un fișier să fie considerat complet.
Un script local este util atunci când aveți nevoie de control deplin asupra aplicațiilor OAuth, discurilor pentru stocare intermediară, jurnalelor sau politicii folderelor de destinație. Compromisul constă în responsabilitatea operațională: computerul trebuie să rămână online, conexiunea sa la rețea devine factorul limitativ, acreditările OAuth trebuie protejate și trebuie să rămână disponibil suficient spațiu temporar pe disc pentru lotul activ și copia de verificare.
Programul publicat aici este intenționat prudent. Acesta copiază din rădăcina unei unități personale într-un folder de destinație nou. Nu oferă o metodă de ștergere, nu suprascrie fișierele în caz de conflict, salvează un punct de control persistent după verificare și se oprește atunci când capacitatea locală sau cea de la destinație scade sub rezerva configurată.
Fluxul de transfer și limitele sale în caz de eroare
Inventarierea structurii sursă
Adaptorul sursei parcurge recursiv folderele, urmărește paginarea furnizorului, înregistrează ID-urile, căile, tipurile și dimensiunile raportate și mapează fișierele Google native acceptate la formate de export portabile.
Verificați preliminar capacitatea destinației și spațiul local
Motorul compară suma dintre octeții în așteptare și o rezervă configurabilă cu cota destinației. De asemenea, verifică sistemul de fișiere pentru stocare intermediară înaintea fiecărui lot și a fiecărei descărcări individuale.
Stocarea intermediară a unui lot limitat
Fișierele sunt procesate în loturi limitate atât de numărul total de octeți, cât și de numărul de fișiere. Numai lotul curent utilizează discul local, astfel încât o bibliotecă mare nu necesită o unitate de aceeași capacitate.
Calcularea hashului și încărcarea
După descărcare, scriptul calculează local SHA-256, verifică dimensiunea cunoscută a sursei, dacă există, creează folderele de destinație și încarcă fișierele în segmente reluabile compatibile cu furnizorul.
Verificare și punct de control
Modul implicit descarcă din nou obiectul nou de la destinație și compară valorile SHA-256. Numai un fișier care corespunde este înregistrat în punctul de control JSON și eliminat din zona locală de pregătire.
Descărcați ediția Python completă, cu licență MIT
Descărcarea conține un singur punct de intrare Python ușor de citit. SDK-urile furnizorilor sunt importate numai pentru un transfer real, astfel încât comenzile demonstrative și de ajutor pot rula înainte de instalarea dependențelor sau a acreditărilor. Un fișier separat de cerințe fixează versiunile minime ale pachetelor acceptate, iar licența este furnizată alături de codul sursă.
Citiți codul înainte de a-l utiliza, testați-l cu un folder de destinație mic și păstrați verificarea implicită prin redescărcare pentru datele valoroase. Niciun script generic nu poate reproduce toate permisiunile de partajare, comenzile rapide, etichetele de retenție, regulile unităților partajate sau politicile entității găzduite.
Descărcați programul Python pentru transfer
Implementare directă cu API-ul Google Drive și Microsoft Graph, cu procesare pe loturi, puncte de control, reîncercări, rezerve de cotă și verificare SHA-256 la destinație.fileark-cloud-transfer.py · Python 3.10+ · licență MIT
Descărcați cerințele Python
Listă restrânsă de dependențe pentru Google OAuth și Drive, autentificarea Microsoft, solicitările Graph și reîncercări.requirements-fileark-cloud-transfer.txt · dependențe pip · text simplu
Descărcați licența MIT
Notificare privind permisiunea, aplicabilă ambelor scripturi FileArk pentru transfer manual.LICENSE-fileark-cloud-transfer.txt · MIT · text simplu
Consultați procesul de siguranță înainte de a acorda acces la cloud

Rulați mai întâi demonstrația. Aceasta nu efectuează apeluri în rețea și nu scrie date în cloud. Ultima linie este intenționat lipsită de ambiguitate: au fost șterse zero fișiere sursă. Motorul real emite aceeași secvență prin jurnale structurate și se încheie cu un cod diferit de zero la primul fișier neverificat.
chmod +x fileark-cloud-transfer.py
python3 fileark-cloud-transfer.py --demo
python3 fileark-cloud-transfer.py --helpCreați clienți OAuth fără a încorpora secrete
Pentru Google Drive, creați un client OAuth pentru desktop într-un proiect Google Cloud, activați API-ul Drive, configurați ecranul de consimțământ și descărcați fișierul JSON al clientului. Transmiteți calea acestuia prin --google-client-secret sau setați GOOGLE_OAUTH_CLIENT_SECRET_FILE. Scriptul solicită acces la Drive deoarece trebuie să listeze și să descarce fișiere, să creeze foldere, să încarce și să verifice fișiere.
Pentru OneDrive, înregistrați o aplicație client publică în Microsoft Entra ID, activați fluxul cu cod de dispozitiv, adăugați permisiunea delegată Files.ReadWrite și transmiteți ID-ul de client al aplicației. Alegeți common pentru conturile personale și organizaționale, organizations pentru conturile de serviciu sau un ID de entitate găzduită specific atunci când politica impune acest lucru.
Tokenurile sunt stocate în fișiere cache locale, astfel încât o migrare întreruptă să poată fi reluată fără o nouă autentificare. Tratați fișierul JSON al clientului și memoria cache a tokenurilor drept secrete: excludeți-le din sistemul de control al versiunilor, limitați permisiunile din sistemul de fișiere, nu le încărcați niciodată în solicitările de asistență și eliminați-le după acceptarea migrării.
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements-fileark-cloud-transfer.txtRulați transferul din Google Drive în OneDrive sau în sens invers
Toate valorile specifice identității sunt furnizate de operator. Programul nu include niciun ID de client, secret, entitate găzduită, token, cont la distanță sau date de autentificare pentru destinație. Prima comandă inițiază conectarea la Google într-un browser și la Microsoft printr-un cod de dispozitiv, apoi copiază datele într-un folder OneDrive nou.
Inversați sursa și destinația pentru a transfera din OneDrive în Google Drive. Folosiți un alt fișier de stare și o altă rădăcină de destinație pentru fiecare migrare independentă. Punctul de control asociază sursa, destinația și rădăcina și refuză reluarea dacă configurația nu corespunde.
export MICROSOFT_CLIENT_ID="your-public-client-id"
python fileark-cloud-transfer.py \
--source google \
--destination onedrive \
--google-client-secret ./client_secret.json \
--microsoft-tenant common \
--destination-root "FileArk Manual Transfer 2026-07-25" \
--batch-gib 8 \
--batch-files 200 \
--local-reserve-gib 15 \
--destination-reserve-gib 10 \
--verification redownloadpython fileark-cloud-transfer.py \
--source onedrive \
--destination google \
--microsoft-client-id "$MICROSOFT_CLIENT_ID" \
--google-client-secret ./client_secret.json \
--destination-root "OneDrive archive 2026-07-25" \
--state-file ./onedrive-to-google-state.json \
--verification redownloadDe ce este verificată capacitatea de mai multe ori
O singură verificare preliminară poate deveni perimată în timpul unui transfer de lungă durată. Cineva poate încărca alte fișiere în destinație, un document Google exportat poate fi mai mare decât indică metadatele sursă, iar aplicațiile fără legătură cu transferul pot ocupa spațiul de pe discul local. Prin urmare, motorul verifică înainte de pornire capacitatea totală a destinației, apoi capacitatea destinației la fiecare lot și din nou după fiecare descărcare locală, precum și spațiul de pe discul local înaintea fiecărei copii pentru pregătire sau verificare.
Valorile de rezervă reprezintă o marjă operațională, nu estimări ale dimensiunii transferului. Mențineți-le suficient de mari pentru actualizările sistemului de operare, întârzierile de contabilizare ale furnizorului și ceilalți utilizatori ai aceleiași cote de stocare în cloud. Când un furnizor nu indică o cotă rămasă finită, scriptul afișează un avertisment și se bazează pe aplicarea limitelor de către furnizor; această abordare este mai puțin sigură decât o verificare preliminară bazată pe o valoare cunoscută și necesită monitorizare activă.
def ensure_destination_capacity(quota, required, reserve):
if quota.remaining is None:
LOG.warning("Destination did not report a finite quota")
return
needed = required + reserve
if quota.remaining < needed:
raise RuntimeError(
f"Destination is too small: {human_bytes(quota.remaining)} free, "
f"{human_bytes(needed)} required including reserve."
)Limitați volumul zonei de pregătire după numărul de octeți și de fișiere
O limită de octeți controlează spațiul ocupat pe disc, iar o limită a numărului de fișiere controlează costul suplimentar al operațiunilor API și al sistemului de fișiere atunci când sursa conține sute de mii de obiecte mici. Un fișier mai mare decât limita lotului este permis ca lot cu un singur fișier, astfel că rezerva trebuie dimensionată pentru cel mai mare obiect individual.
Dimensiunea implicită a fragmentului este de 10 MiB. Aceasta este un multiplu comun al granularității de 256 KiB pentru încărcările reluabile din Google Drive și al cerinței Microsoft Graph privind fragmentele secvențiale de 320 KiB. Validatorul din linia de comandă respinge dimensiunile incompatibile ale fragmentelor înainte de autentificare.
def batches(files, max_bytes, max_files):
batch, batch_size = [], 0
for item in files:
planned_size = max(item.size, 1)
if batch and (
len(batch) >= max_files
or batch_size + planned_size > max_bytes
):
yield batch
batch, batch_size = [], 0
batch.append(item)
batch_size += planned_size
if batch:
yield batchGestionați documentele native Google prin conversie
Proiectele Google Docs, Sheets, Slides, Drawings și Apps Script nu sunt fluxuri obișnuite de octeți care pot fi descărcate. Adaptorul Google le exportă în formatele DOCX, XLSX, PPTX, PNG și, respectiv, JSON, adăugând o extensie portabilă numelui fișierului. Folderele sunt parcurse, dar nu sunt încărcate ca obiecte goale decât dacă includ un fișier.
Conversia poate modifica fonturile, formulele, comentariile, obiectele încorporate, aspectul paginilor și istoricul colaborării. Punctele finale pentru export ale Google impun, de asemenea, restricții privind formatul și dimensiunea. Scriptul omite tipurile native neacceptate și afișează un avertisment, în loc să inventeze o reprezentare. Verificați manual fișiere convertite reprezentative.
Comenzile rapide, unitățile partajate, fișierele partajate cu dvs., dar care nu se află în My Drive, pachetele OneNote, metadatele organizaționale de retenție, istoricul versiunilor și listele ACL de partajare nu sunt incluse în această ediție. Din cauza acestor limite, copierea fișierelor nu trebuie prezentată drept o migrare completă a entității găzduite.
Folosiți verificarea completă prin redescărcare de la destinație pentru confirmarea exactă a octeților
Finalizarea cu succes a încărcării la furnizor este necesară, dar nu suficientă. După încărcare, scriptul compară mai întâi dimensiunea din metadatele destinației cu cea a fișierului din zona de pregătire. Apoi, în modul implicit de redescărcare, descarcă obiectul de la destinație într-un fișier temporar alăturat, calculează SHA-256 și compară valoarea rezultată cu cea a sursei din zona de pregătire.
O intrare este adăugată în punctul de control numai dacă dimensiunea și suma de control coincid. Punctul de control înregistrează ID-ul sursei, dimensiunea raportată de sursă, ID-ul destinației, calea destinației, numărul real de octeți, ambele sume de control și ora UTC a finalizării. Dacă o cale sursă inclusă în punctul de control indică ulterior un alt ID sau o altă dimensiune, scriptul se oprește în loc să omită în tăcere datele modificate.
Redescărcarea dublează traficul de citire la destinație și necesită temporar spațiu atât pentru fișierul intermediar, cât și pentru copia de verificare. Selectați modul bazat pe metadate numai dacă înțelegeți acest cost și există un proces independent de verificare a conținutului.
destination.redownload(uploaded, verification_copy)
verification_hash = sha256_file(verification_copy)
if verification_hash != local_hash:
raise RuntimeError(
f"SHA-256 mismatch after destination re-download: {relative!r}."
)
state["completed"][relative] = {
"source_id": item.id,
"destination_id": uploaded.id,
"bytes": actual_size,
"sha256": local_hash,
"destination_sha256": verification_hash,
}Reluați fără a considera incertitudinea drept succes
Programul scrie atomic starea folosind un fișier temporar și redenumirea acestuia. Un element verificat este eliminat din zona locală intermediară numai după această scriere persistentă. Rularea din nou a aceleiași comenzi omite elementele incluse în punctul de control și continuă cu căile în așteptare.
Poate surveni o oprire neașteptată după ce furnizorul acceptă o încărcare, dar înainte de scrierea punctului de control. Deoarece comportamentul configurat pentru conflicte este „fail”, următoarea rulare se oprește la calea existentă din destinație, în loc să suprascrie datele sau să raporteze în mod eronat succesul. Inspectați obiectul, comparați-l, apoi fie adăugați cu atenție o intrare de recuperare verificată, fie reporniți transferul într-un director rădăcină nou la destinație.
Operațiunile sunt reîncercate în limite prestabilite în cazul expirării OAuth, limitării ratei de solicitări, erorilor temporare de server și fragmentelor întrerupte. Erorile de autentificare sau de permisiuni care persistă opresc programul. Păstrați jurnalele, punctul de control și conținutul zonei de pregătire până când înțelegeți cauza erorii.
Efectuați un test de acceptanță real
- Începeți cu un folder mic care conține fișiere goale, fișiere mari, căi cu multe niveluri, nume Unicode și documente native Google.
- Rulați mai întâi --dry-run și comparați numărul total de octeți din inventar cu cel afișat în interfața furnizorului.
- Monitorizați separat spațiul local disponibil și cota destinației pe durata primului lot de producție.
- Mențineți activată verificarea prin redescărcare și arhivați punctul de control împreună cu evidențele migrării.
- Deschideți în destinație fișiere PDF, fișiere Office, imagini, videoclipuri și arhive reprezentative, precum și documente native convertite.
- Comparați numerele estimate de foldere și fișiere, investigați fiecare element omis sau eșuat și testați accesul din contul unui al doilea utilizator.
- Păstrați sursa neschimbată pe durata unei perioade de suprapunere definite. Acest script nu o șterge niciodată.
Întrebări frecvente
Scriptul Python șterge vreodată fișierele sursă?
Nu. Ștergerea de la sursă nu este implementată. Motorul descarcă datele de la sursă și le scrie într-un director rădăcină separat la destinație; verificarea reușită elimină numai copia temporară din zona locală de pregătire.
Poate transfera în ambele direcții?
Da. Setați Google Drive sau OneDrive ca sursă și celălalt furnizor ca destinație. Folosiți un punct de control și o rădăcină de destinație unice pentru fiecare migrare.
Păstrează permisiunile de partajare și istoricul fișierelor?
Nu. Această ediție copiază conținutul actual al fișierelor și căile folderelor. Listele ACL de partajare, linkurile publice, versiunile, comentariile, etichetele, politica de retenție și metadatele specifice organizației necesită migrare și validare separate.
De ce trebuie redescărcate fișierele care tocmai au fost încărcate?
Acceptarea încărcării și dimensiunea din metadate nu demonstrează că octeții exacți de la destinație pot fi citiți înapoi. Modul de redescărcare calculează SHA-256 pentru conținutul de la destinație și salvează un punct de control numai în cazul unei potriviri exacte.
Este acesta un instrument oficial Google sau Microsoft?
Nu. Este o implementare de referință FileArk independentă, publicată sub licența MIT. Examinați-o, testați-o cu date neesențiale și respectați politicile furnizorului și ale organizației dvs.
Resurse oficiale folosite pentru acest ghid
- Centrul de instruire Google Workspace: trecerea de la OneDrive la Google Drive
- Ajutor Google Drive: stocarea și comportamentul fișierelor
- Asistență Microsoft: încărcarea și salvarea fișierelor în OneDrive
- API-ul Google Drive: descărcarea și exportarea fișierelor
- API-ul Google Drive: încărcări reluabile
- API-ul Google Drive: câmpurile cotei de stocare
- Microsoft Graph: listarea elementelor copil ale unei unități
- Microsoft Graph: crearea unei sesiuni de încărcare reluabile
- Microsoft Graph: resursa privind cota OneDrive