Python · Google Drive ↔ OneDrive · Technická příručka s otevřeným zdrojovým kódem
Vytvořte v Pythonu bezpečný přenos mezi Google Drive a OneDrive
Tato příručka mění zdánlivě jednoduché, ale ve skutečnosti obtížné kopírování mezi cloudy v jednoznačný proces: sestavit inventář, provést předběžné kontroly, připravit data, vypočítat otisk, nahrát je, znovu je stáhnout, porovnat, vytvořit kontrolní bod a teprve poté uvolnit místo na místním disku.
Aktualizováno ; 22 min čtení.
Stručná odpověď
Při spravované migraci FileArk tento postup automatizuje, aniž by se váš počítač stal přenosovou cestou pro data. Služba byla testována s migračními úlohami o objemu několika terabajtů a před nahlášením úspěchu kontroluje přijetí dat ze zdroje, potvrzení nahrání poskytovatelem a cílový objekt. Pokud potřebujete proces provozovat sami, níže uvedený program v Pythonu s licencí MIT provede konzervativní kopírování přes váš počítač a zdrojové soubory nikdy neodstraní.
Než vyberete kód, zvolte provozní model
Služba pro přímou migraci mezi cloudy je praktickou volbou, pokud je knihovna velká, přenos musí probíhat bez obsluhy nebo data nemají procházet přes notebook. FileArk zajišťuje přenos online, sleduje odpovědi poskytovatelů, opakuje pokusy po zotavitelných selháních a nabízí jednotný přehled o průběhu. Před označením souboru za dokončený provádí jeho proces ověření tři nezávislé kontroly.
Místní skript je užitečný, když potřebujete plnou kontrolu nad aplikacemi OAuth, přípravnými disky, protokoly nebo pravidly cílových složek. Nevýhodou je provozní odpovědnost: váš počítač musí zůstat online, jeho síťové připojení se stává úzkým hrdlem, přihlašovací údaje OAuth je nutné chránit a pro aktivní dávku i ověřovací kopii musí zůstat k dispozici dostatek dočasného místa na disku.
Zde zveřejněný program je záměrně konzervativní. Kopíruje data z kořenové složky jednoho osobního disku do nové cílové složky. Nenabízí metodu mazání, nepřepisuje konfliktní položky, po ověření uloží trvalý kontrolní bod a zastaví se, pokud místní nebo cílová kapacita klesne pod nastavenou rezervu.
Proces přenosu a hranice jeho selhání
Sestavení inventáře zdrojového stromu
Zdrojový adaptér rekurzivně prochází složky, zpracovává stránkování poskytovatele, zaznamenává ID, cesty, typy a uváděné velikosti a převádí podporované nativní soubory Google do přenositelných exportních formátů.
Předběžně zkontrolujte kapacitu cílového umístění a místního disku
Přenosový modul porovnává počet čekajících bajtů navýšený o nastavitelnou rezervu s cílovou kvótou. Před každou dávkou i každým jednotlivým stažením také kontroluje přípravný souborový systém.
Příprava omezené dávky
Soubory se zpracovávají v dávkách omezených celkovým počtem bajtů i počtem souborů. Místní disk využívá pouze aktuální dávka, takže rozsáhlá knihovna nevyžaduje disk o stejné velikosti.
Výpočet otisku a nahrání
Po stažení skript místně vypočítá SHA-256, zkontroluje známou velikost zdroje, vytvoří cílové složky a nahraje data v obnovitelných blocích kompatibilních s poskytovatelem.
Ověření a vytvoření kontrolního bodu
Ve výchozím režimu se nový objekt z cílového umístění znovu stáhne a porovná se jeho SHA-256. Do kontrolního bodu JSON se zapíše a z místní pracovní oblasti odstraní pouze soubor, který se shoduje.
Stáhněte si kompletní verzi v Pythonu s licencí MIT
Ke stažení je jediný přehledný vstupní soubor v Pythonu. Sady SDK poskytovatelů se importují pouze při skutečném přenosu, takže ukázku a příkazy nápovědy lze spustit ještě před instalací závislostí nebo přihlašovacích údajů. Samostatný soubor s požadavky určuje minimální podporované verze balíčků a licence je přiložena ke zdrojovému kódu.
Před použitím si projděte kód, otestujte ho s malou cílovou složkou a u cenných dat ponechte výchozí ověření opětovným stažením. Žádný obecný skript nedokáže zachovat veškerá oprávnění ke sdílení, zástupce, štítky uchovávání, pravidla sdílených disků ani zásady tenanta.
Stáhnout Python program pro přenos
Přímá implementace rozhraní Google Drive API a Microsoft Graph s dávkovým zpracováním, kontrolními body, opakovanými pokusy, rezervami kvót a ověřením SHA-256 v cíli.fileark-cloud-transfer.py · Python 3.10+ · licence MIT
Stáhnout požadavky pro Python
Stručný seznam závislostí pro Google OAuth a Drive, ověřování Microsoft, požadavky Graph a podporu opakovaných pokusů.requirements-fileark-cloud-transfer.txt · požadavky pip · prostý text
Stáhnout licenci MIT
Licenční ujednání vztahující se na oba skripty FileArk pro ruční přenos.LICENSE-fileark-cloud-transfer.txt · MIT · prostý text
Před udělením přístupu ke cloudu si projděte bezpečnostní postup

Nejprve spusťte ukázku. Neprovádí žádná síťová volání a nezapisuje žádná data do cloudu. Poslední řádek je záměrně jednoznačný: nebyl odstraněn žádný zdrojový soubor. Skutečný přenosový modul vypisuje stejnou posloupnost prostřednictvím strukturovaných protokolů a při prvním neověřeném souboru skončí s nenulovým návratovým kódem.
chmod +x fileark-cloud-transfer.py
python3 fileark-cloud-transfer.py --demo
python3 fileark-cloud-transfer.py --helpVytvoření klientů OAuth bez vkládání tajných údajů do kódu
Pro Google Drive vytvořte v projektu Google Cloud desktopového klienta OAuth, povolte Drive API, nakonfigurujte obrazovku pro vyjádření souhlasu a stáhněte klientský soubor JSON. Jeho cestu předejte pomocí --google-client-secret nebo nastavte GOOGLE_OAUTH_CLIENT_SECRET_FILE. Skript požaduje přístup k Disku, protože musí zobrazovat seznamy souborů, stahovat je, vytvářet složky, nahrávat soubory a ověřovat je.
Pro OneDrive zaregistrujte veřejnou klientskou aplikaci v Microsoft Entra ID, povolte tok s kódem zařízení, přidejte delegované oprávnění Files.ReadWrite a předejte ID klienta aplikace. Pro spotřebitelské a organizační účty zvolte common, pro pracovní účty organizations nebo použijte konkrétní ID tenantu, pokud to vyžadují zásady.
Tokeny se ukládají do místních souborů mezipaměti, aby bylo možné přerušenou migraci obnovit bez nového přihlášení. S klientským souborem JSON a mezipamětí tokenů zacházejte jako s tajnými údaji: vyřaďte je ze správy verzí, omezte oprávnění v souborovém systému, nikdy je nenahrávejte k požadavkům na podporu a po schválení migrace je odstraňte.
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements-fileark-cloud-transfer.txtSpusťte přenos z Google Drive do OneDrive — nebo opačným směrem
Všechny hodnoty vztahující se k identitě zadává provozovatel. Program neobsahuje žádné ID klienta, tajný klíč, tenant, token, vzdálený účet ani přihlašovací údaje k cílovému umístění. První příkaz přihlásí uživatele ke Googlu v prohlížeči a k Microsoftu pomocí kódu zařízení a poté zkopíruje data do nové složky OneDrive.
Chcete-li přenášet z OneDrive na Google Drive, prohoďte zdroj a cíl. Pro každou samostatnou migraci použijte jiný stavový soubor a kořenovou cílovou složku. Kontrolní bod je svázán s poskytovatelem zdroje, poskytovatelem cíle a kořenovou složkou a při neshodě konfigurace odmítne pokračovat.
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 redownloadProč se kapacita kontroluje vícekrát
Výsledek jediné předběžné kontroly může během dlouhého přenosu zastarat. Někdo může do cílového umístění nahrát další soubory, exportovaný dokument Google může být větší, než naznačují jeho zdrojová metadata, a místní disk mohou zaplnit nesouvisející aplikace. Proto modul kontroluje celkovou kapacitu cílového umístění před zahájením, cílovou kapacitu u každé dávky, cílovou kapacitu znovu po každém místním stažení a místní disk před každým uložením do pracovní oblasti nebo pořízením ověřovací kopie.
Hodnoty rezerv představují provozní rezervu, nikoli odhad velikosti přenosu. Nastavte je dostatečně vysoko s ohledem na aktualizace operačního systému, prodlevu v účtování poskytovatele a další uživatele stejné cloudové kvóty. Pokud poskytovatel nezpřístupňuje konečnou zbývající kvótu, skript zobrazí upozornění a spoléhá na vynucení limitu poskytovatelem. To je méně spolehlivé než předběžná kontrola známé kapacity a vyžaduje aktivní sledování.
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."
)Omezte velikost pracovní oblasti podle objemu dat i počtu souborů
Limit bajtů omezuje využití disku, zatímco limit počtu souborů omezuje režii rozhraní API a souborového systému, pokud zdroj obsahuje stovky tisíc drobných objektů. Soubor větší než limit dávky je povolen jako jednosouborová dávka, takže rezerva musí být dimenzována podle největšího jednotlivého objektu.
Výchozí velikost části je 10 MiB. Jde o společný násobek jednotky 256 KiB pro obnovitelné nahrávání na Google Drive a požadavku Microsoft Graph na sekvenční fragmenty o velikosti 320 KiB. Validátor příkazového řádku odmítne nekompatibilní velikosti částí ještě před ověřením totožnosti.
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 batchZpracujte nativní dokumenty Google pomocí převodu
Dokumenty, Tabulky, Prezentace a Nákresy Google ani projekty Apps Script nejsou běžnými datovými proudy bajtů, které lze stáhnout. Adaptér Google je exportuje do formátů DOCX, XLSX, PPTX, PNG a JSON a přidá přenositelnou příponu souboru. Složky prochází, ale nenahrává je jako prázdné objekty, pokud neobsahují žádný soubor.
Převod může změnit písma, vzorce, komentáře, vložené objekty, rozvržení stránek a historii spolupráce. Koncové body Googlu pro export navíc uplatňují omezení formátu a velikosti. Skript nepodporované nativní typy s upozorněním přeskočí, místo aby pro ně vytvářel náhradní podobu. Reprezentativní převedené soubory zkontrolujte ručně.
Tato verze nepodporuje zástupce, sdílené disky, soubory sdílené s vámi, které nejsou umístěné na Mém disku, balíčky OneNote, organizační metadata uchovávání, historii verzí ani seznamy ACL pro sdílení. Kvůli těmto omezením nelze kopírování souborů označovat za úplnou migraci tenanta.
Přesné bajty ověřte úplným opětovným stažením z cíle
Úspěšné nahrání u poskytovatele je nezbytné, ale samo o sobě nestačí. Po nahrání skript nejprve porovná velikost v metadatech cílového objektu s pracovním souborem. Ve výchozím režimu opětovného stažení poté stáhne cílový objekt do dočasného souboru ve stejné složce, vypočítá SHA-256 a porovná tento otisk s otiskem pracovního zdrojového souboru.
Záznam kontrolního bodu se vytvoří pouze tehdy, když se shoduje velikost i otisk. Kontrolní bod zaznamenává ID zdroje, velikost uvedenou zdrojem, ID cíle, cílovou cestu, skutečný počet bajtů, oba otisky a čas dokončení v UTC. Pokud cesta ke zdroji uložená v kontrolním bodu později odkazuje na jiné ID nebo velikost, skript se zastaví, místo aby změněná data bez upozornění přeskočil.
Opětovné stažení zdvojnásobuje objem dat čtených na cílové straně a dočasně vyžaduje místo pro připravený soubor i ověřovací kopii. Režim metadat vyberte pouze tehdy, pokud těmto nákladům rozumíte a máte k dispozici nezávislý proces ověření obsahu.
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,
}Obnovení bez považování nejistého výsledku za úspěch
Program zapisuje stav atomicky prostřednictvím dočasného souboru a jeho přejmenování. Ověřená položka se z místního přípravného úložiště odstraní až po tomto trvalém zápisu. Opětovné spuštění stejného příkazu přeskočí položky uložené v kontrolním bodu a pokračuje čekajícími cestami.
K pádu může dojít poté, co poskytovatel přijme nahraný soubor, ale ještě před zapsáním kontrolního bodu. Protože je chování při konfliktu nastaveno na selhání, další běh se u této existující cílové cesty zastaví, místo aby ji přepsal nebo chybně ohlásil úspěch. Objekt zkontrolujte a porovnejte. Poté buď opatrně přidejte ověřený záznam pro obnovení, nebo spusťte migraci znovu do nového kořenového cílového umístění.
Při vypršení platnosti OAuth, omezení rychlosti, přechodných chybách serveru a přerušení částí se pokusy opakují v rámci stanovených limitů. Chyby ověření totožnosti nebo trvalé chyby oprávnění program zastaví. Dokud příčině selhání neporozumíte, uchovejte protokoly, kontrolní bod i obsah pracovní oblasti.
Proveďte skutečný přejímací test
- Začněte s malou složkou obsahující prázdné soubory, velké soubory, hluboce vnořené cesty, názvy v Unicode a nativní dokumenty Google.
- Nejprve spusťte --dry-run a porovnejte celkový počet bajtů v inventáři s údajem v rozhraní poskytovatele.
- Během první produkční dávky sledujte nezávisle volné místo na místním disku a cílovou kvótu.
- Ponechte zapnuté ověření opětovným stažením a kontrolní bod archivujte spolu se záznamy o migraci.
- V cílovém umístění otevřete reprezentativní soubory PDF, soubory Office, obrázky, videa, archivy a převedené nativní dokumenty.
- Porovnejte očekávané počty složek a souborů, prověřte každou přeskočenou nebo neúspěšnou položku a otestujte přístup z účtu druhého uživatele.
- Po stanovenou dobu souběhu ponechte zdroj beze změny. Tento skript ho nikdy nemaže.
Časté dotazy
Maže Python skript někdy zdrojové soubory?
Ne. Odstranění zdrojových dat není implementováno. Modul stahuje data ze zdroje a zapisuje je do samostatného kořenového cílového umístění. Úspěšné ověření odstraní pouze dočasnou místní pracovní kopii.
Dokáže přenášet data oběma směry?
Ano. Nastavte Google Drive nebo OneDrive jako zdroj a druhého poskytovatele jako cíl. Pro každou migraci použijte jedinečný kontrolní bod a kořenovou cílovou složku.
Zachová skript oprávnění ke sdílení a historii souborů?
Ne. Tato verze kopíruje aktuální obsah souborů a cesty ke složkám. Seznamy ACL pro sdílení, veřejné odkazy, verze, komentáře, štítky, zásady uchovávání a metadata specifická pro organizaci vyžadují samostatnou migraci a ověření.
Proč znovu stahovat právě nahrané soubory?
Přijetí nahraného souboru ani velikost v metadatech neprokazují, že lze z cíle načíst přesně stejné bajty. Režim opětovného stažení vypočítá SHA-256 cílového obsahu a vytvoří kontrolní bod pouze při přesné shodě.
Jde o oficiální nástroj Google nebo Microsoft?
Ne. Jde o nezávislou referenční implementaci FileArk zveřejněnou pod licencí MIT. Projděte si ji, otestujte ji s nekritickými daty a dodržujte zásady poskytovatele i své organizace.
Oficiální zdroje použité v tomto průvodci
- Výukové centrum Google Workspace: přechod z OneDrive na Google Drive
- Nápověda Google Drive: úložiště a chování souborů
- Podpora Microsoftu: nahrávání a ukládání souborů na OneDrive
- Google Drive API: stahování a export souborů
- Google Drive API: obnovitelná nahrávání
- Google Drive API: pole kvóty úložiště
- Microsoft Graph: výpis podřízených položek jednotky
- Microsoft Graph: vytvoření relace pro obnovitelné nahrávání
- Microsoft Graph: prostředek kvóty OneDrive