Python · Google Drive ↔ OneDrive · Açık kaynak mühendislik rehberi
Python ile Güvenli Bir Google Drive–OneDrive Aktarımı Oluşturun
Bu rehber, göründüğünden çok daha zor olan bir bulut kopyalama işlemini açık bir işlem hattına dönüştürür: listeleme, ön kontrol, hazırlama, özet değerini hesaplama, yükleme, yeniden indirme, karşılaştırma, kontrol noktası oluşturma ve ancak bundan sonra yerel disk alanını boşaltma.
Güncellenme tarihi ; 22 dakikalık okuma.
Kısa yanıt
Yönetilen bir geçiş için FileArk, bilgisayarınızı veri aktarım yolu hâline getirmeden bu iş akışını otomatikleştirir. Çok terabaytlı geçiş iş yükleriyle test edilmiştir ve başarı bildirmeden önce kaynaktan alımı, sağlayıcının yüklemeyi kabul etmesini ve hedef nesneyi kontrol eder. İşlem hattını kendiniz çalıştırmanız gerekiyorsa aşağıdaki MIT lisanslı Python programı, verileri bilgisayarınız üzerinden temkinli biçimde kopyalar ve kaynak dosyaları hiçbir zaman silmez.
Kodu seçmeden önce çalışma modelini seçin
Dosya arşivi büyük olduğunda, bağlantının gözetimsiz çalışması gerektiğinde veya verilerin bir dizüstü bilgisayardan geçmemesi istendiğinde doğrudan bulut geçişi hizmeti pratik bir seçimdir. FileArk aktarımı çevrimiçi tutar, sağlayıcı yanıtlarını izler, giderilebilir hatalarda yeniden dener ve ilerlemeyi tek bir görünümde sunar. Doğrulama süreci, bir dosyayı tamamlanmış olarak kabul etmeden önce birbirinden bağımsız üç kontrol gerçekleştirir.
OAuth uygulamaları, hazırlama diskleri, günlükler veya hedef klasör ilkesi üzerinde tam denetime ihtiyaç duyduğunuzda yerel bir betik kullanışlıdır. Bunun karşılığında operasyonel sorumluluğu üstlenirsiniz: Makineniz çevrimiçi kalmalı, ağ bağlantısı darboğaz hâline gelir, OAuth kimlik bilgileri korunmalı ve etkin toplu işlem ile doğrulama kopyası için yeterli geçici disk alanı kullanılabilir durumda olmalıdır.
Burada yayımlanan program kasıtlı olarak temkinli tasarlanmıştır. Bir kişisel sürücünün kök dizininden yeni bir hedef klasöre kopyalama yapar. Silme yöntemi sunmaz, çakışmalarda dosyaların üzerine yazmaz, doğrulamadan sonra kalıcı bir kontrol noktası kaydeder ve yerel ya da hedef kapasite yapılandırdığınız yedek alanın altına düştüğünde durur.
Aktarım işlem hattı ve hata sınırları
Kaynak dizin ağacının envanterini çıkarın
Kaynak bağdaştırıcısı klasörleri yinelemeli olarak tarar, sağlayıcının sayfalandırmasını izler; kimlikleri, yolları, türleri ve bildirilen boyutları kaydeder ve desteklenen Google'a özgü dosyaları taşınabilir dışa aktarma biçimleriyle eşler.
Hedef ve yerel kapasiteyi önceden kontrol edin
Motor, bekleyen baytlar ile yapılandırılabilir yedek alanın toplamını hedef kotasıyla karşılaştırır. Ayrıca her toplu işlemden ve her bir indirmeden önce hazırlama dosya sistemini kontrol eder.
Sınırlandırılmış bir toplu işlemi hazırlayın
Dosyalar, hem toplam bayt hem de dosya sayısıyla sınırlandırılan toplu işlemler hâlinde işlenir. Yalnızca geçerli toplu işlem yerel diski kullanır; bu nedenle büyük bir arşiv için aynı büyüklükte bir sürücü gerekmez.
Özet değerini hesaplayın ve yükleyin
Betik, indirme işleminden sonra yerel SHA-256 değerini hesaplar, bilinen kaynak boyutunu kontrol eder, hedef klasörleri oluşturur ve sağlayıcıyla uyumlu, devam ettirilebilir parçalar hâlinde yükleme yapar.
Doğrulayın ve kontrol noktası oluşturun
Varsayılan mod, hedefteki yeni nesneyi yeniden indirip SHA-256 değerlerini karşılaştırır. Yalnızca eşleşen dosya JSON kontrol noktasına kaydedilir ve yerel hazırlama alanından kaldırılır.
MIT lisanslı eksiksiz Python sürümünü indirin
İndirilen dosya, tek ve okunabilir bir Python giriş noktasıdır. Sağlayıcı SDK'ları yalnızca gerçek bir aktarım için içe aktarılır; böylece demo ve yardım komutları, bağımlılıklar veya kimlik bilgileri yüklenmeden önce çalışabilir. Ayrı bir gereksinim dosyası, desteklenen minimum paket sürümlerini sabitler ve lisans kaynak kodun yanında sunulur.
Kullanmadan önce kodu inceleyin, küçük bir hedef klasörle test edin ve değerli veriler için varsayılan yeniden indirerek doğrulama özelliğini açık tutun. Genel amaçlı hiçbir betik; tüm paylaşım izinlerini, kısayolları, saklama etiketlerini, ortak sürücü kurallarını veya kiracı ilkelerini bire bir aktaramaz.
Python aktarım programını indirin
Toplu işlemler, kontrol noktaları, yeniden denemeler, kota yedekleri ve hedefte SHA-256 doğrulaması içeren doğrudan Google Drive API ve Microsoft Graph uygulaması.fileark-cloud-transfer.py · Python 3.10+ · MIT lisansı
Python gereksinimlerini indirin
Google OAuth ve Drive, Microsoft kimlik doğrulaması, Graph istekleri ve yeniden deneme desteği için kısa bir bağımlılık listesi.requirements-fileark-cloud-transfer.txt · pip gereksinimleri · düz metin
MIT lisansını indirin
Her iki FileArk manuel aktarım betiğini de kapsayan izin bildirimi.LICENSE-fileark-cloud-transfer.txt · MIT · düz metin
Bulut erişimi vermeden önce güvenlik sürecini inceleyin

Önce demoyu çalıştırın. Demo hiçbir ağ çağrısı yapmaz ve buluta veri yazmaz. Son satır kasıtlı olarak son derece açıktır: Sıfır kaynak dosya silindi. Gerçek motor, yapılandırılmış günlükler aracılığıyla aynı diziyi oluşturur ve doğrulanamayan ilk dosyada sıfırdan farklı bir kodla çıkar.
chmod +x fileark-cloud-transfer.py
python3 fileark-cloud-transfer.py --demo
python3 fileark-cloud-transfer.py --helpGizli anahtarları koda gömmeden OAuth istemcileri oluşturun
Google Drive için bir Google Cloud projesinde masaüstü OAuth istemcisi oluşturun, Drive API'yi etkinleştirin, izin ekranını yapılandırın ve istemci JSON dosyasını indirin. Dosya yolunu --google-client-secret ile iletin veya GOOGLE_OAUTH_CLIENT_SECRET_FILE değişkenini ayarlayın. Betik; dosyaları listelemesi, indirmesi, klasör oluşturması, yükleme yapması ve dosyaları doğrulaması gerektiği için Drive erişimi ister.
OneDrive için Microsoft Entra ID'de genel istemci uygulaması kaydedin, cihaz kodu akışını etkinleştirin, temsilci Files.ReadWrite iznini ekleyin ve uygulamanın istemci kimliğini sağlayın. Bireysel ve kurumsal hesaplar için common, iş hesapları için organizations veya politika gerektiriyorsa belirli bir kiracı kimliği seçin.
Kesintiye uğrayan bir geçişin yeniden oturum açmadan devam edebilmesi için belirteçler yerel dosyalarda önbelleğe alınır. İstemci JSON dosyasını ve belirteç önbelleklerini gizli bilgi olarak değerlendirin: Bunları sürüm kontrolünün dışında tutun, dosya sistemi izinlerini kısıtlayın, destek taleplerine asla yüklemeyin ve geçiş kabul edildikten sonra kaldırın.
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements-fileark-cloud-transfer.txtGoogle Drive'dan OneDrive'a aktarın veya yönü tersine çevirin
Kimliğe özgü tüm değerler operatöre aittir. Program herhangi bir istemci kimliği, gizli anahtar, kiracı, belirteç, uzak hesap veya hedef kimlik bilgisi içermez. İlk komut, tarayıcıda Google oturumu ve cihaz koduyla Microsoft oturumu açar; ardından dosyaları yeni bir OneDrive klasörüne kopyalar.
OneDrive'dan Google Drive'a aktarım yapmak için kaynak ile hedefi tersine çevirin. Birbirinden bağımsız her geçiş için farklı bir durum dosyası ve hedef kök dizini kullanın. Kontrol noktası; kaynak sağlayıcıyı, hedef sağlayıcıyı ve kök dizini birbirine bağlar, yapılandırma eşleşmiyorsa işleme devam etmeyi reddeder.
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 redownloadKapasite neden birden fazla kez kontrol edilir?
Tek seferlik bir ön kontrol, uzun bir aktarım sürerken güncelliğini yitirebilir. Başka biri hedefe farklı dosyalar yükleyebilir, dışa aktarılan bir Google belgesi kaynak meta verilerinin gösterdiğinden daha büyük olabilir ve ilgisiz uygulamalar yerel disk alanını tüketebilir. Bu nedenle motor; başlamadan önce hedefin toplam kapasitesini, her toplu işlemde hedef kapasitesini, her yerel indirmeden sonra hedef kapasitesini yeniden ve her hazırlama ya da doğrulama kopyasından önce yerel diski kontrol eder.
Ayrılan rezerv değerleri, aktarım boyutu tahminleri değil, işlemler için bırakılan ek kapasitedir. Bu değerleri işletim sistemi güncellemelerine, sağlayıcının kullanım hesaplamasındaki gecikmelere ve aynı bulut kotasını kullanan diğer kullanıcılara yetecek kadar yüksek tutun. Sağlayıcı sonlu bir kalan kota bilgisi sunmuyorsa betik uyarı verir ve sağlayıcının uyguladığı sınırlara güvenir. Bu yaklaşım, kalan kotanın bilindiği bir ön kontrolden daha zayıftır ve etkin izleme gerektirir.
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."
)Hazırlama alanının kullanımını bayt ve dosya sayısıyla sınırlayın
Bayt üst sınırı disk kullanımını, dosya sayısı üst sınırı ise kaynakta yüz binlerce küçük nesne bulunduğunda API ve dosya sistemi yükünü kontrol eder. Toplu işlem sınırından büyük bir dosyaya tek dosyalık toplu işlem olarak izin verilir; bu nedenle ayrılan yedek alan, en büyük tekil nesneye göre boyutlandırılmalıdır.
Varsayılan parça boyutu 10 MiB'dir. Bu değer, Google Drive'ın devam ettirilebilir yüklemelerdeki 256 KiB ayrıntı düzeyi ile Microsoft Graph'ın sıralı parçalar için 320 KiB gereksiniminin ortak katıdır. Komut satırı doğrulayıcısı, uyumsuz parça boyutlarını kimlik doğrulamadan önce reddeder.
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 batchGoogle'a özgü belgeleri dönüştürerek işleyin
Google Dokümanlar, E-Tablolar, Slaytlar, Çizimler ve Apps Script projeleri sıradan, indirilebilir bayt akışları değildir. Google bağdaştırıcısı bunları sırasıyla DOCX, XLSX, PPTX, PNG ve JSON biçimlerinde dışa aktarır ve taşınabilir bir dosya uzantısı ekler. Klasörler taranır ancak dosya içermedikleri sürece boş nesneler olarak yüklenmez.
Dönüştürme; yazı tiplerini, formülleri, yorumları, gömülü nesneleri, sayfa düzenini ve ortak çalışma geçmişini değiştirebilir. Google dışa aktarma uç noktaları da biçim ve boyut kısıtlamaları uygular. Betik, desteklenmeyen yerel türler için bir gösterim uydurmak yerine uyarı vererek bunları atlar. Temsili dönüştürülmüş dosyaları elle inceleyin.
Kısayollar, ortak sürücüler, sizinle paylaşılan ancak Drive'ımda bulunmayan dosyalar, OneNote paketleri, kurumsal saklama meta verileri, sürüm geçmişi ve paylaşım ACL'leri bu sürümün kapsamı dışındadır. Bu sınırlar nedeniyle bir dosya kopyalama işlemi, eksiksiz bir kiracı geçişi olarak tanımlanmamalıdır.
Baytların bire bir eşleşmesi için hedeften tam yeniden indirme doğrulaması kullanın
Sağlayıcının yüklemeyi başarıyla tamamlaması gereklidir ancak tek başına yeterli değildir. Yüklemeden sonra betik önce hedef meta verilerindeki boyutu hazırlanan dosyayla karşılaştırır. Ardından varsayılan yeniden indirme modunda hedef nesneyi aynı dizindeki geçici bir dosyaya indirir, SHA-256 değerini hesaplar ve bu özeti hazırlanan kaynak dosyanın özetiyle karşılaştırır.
Yalnızca hem boyut hem de özet değeri eşleştiğinde bir kontrol noktası kaydı oluşturulur. Kontrol noktası; kaynak kimliğini, kaynağın bildirdiği boyutu, hedef kimliğini, hedef yolunu, gerçek bayt sayısını, her iki özet değerini ve UTC tamamlanma zamanını kaydeder. Kontrol noktası kaydedilmiş bir kaynak yolu daha sonra farklı bir kimliğe veya boyuta işaret ederse betik, değişen verileri sessizce atlamak yerine durur.
Yeniden indirme, hedef tarafındaki okuma trafiğini iki katına çıkarır ve hem hazırlama dosyası hem de doğrulama kopyası için geçici olarak alan gerektirir. Yalnızca bu maliyetin bilincindeyseniz ve bağımsız bir içerik doğrulama süreci varsa meta veri modunu seçin.
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,
}Belirsizliği başarı saymadan devam edin
Program, geçici bir dosya oluşturup yeniden adlandırarak durumu atomik biçimde kaydeder. Doğrulanmış bir öğe ancak bu kalıcı yazma işleminden sonra yerel hazırlama alanından kaldırılır. Aynı komut yeniden çalıştırıldığında kontrol noktası kaydedilmiş öğeler atlanır ve bekleyen yollarla devam edilir.
Sağlayıcı bir yüklemeyi kabul ettikten sonra ancak kontrol noktası yazılmadan önce program çökebilir. Çakışma davranışı "fail" olarak ayarlandığından sonraki çalıştırma, dosyanın üzerine yazmak veya yanlış biçimde başarı bildirmek yerine hedefteki mevcut yolda durur. Nesneyi inceleyip karşılaştırın; ardından doğrulanmış bir kurtarma kaydını dikkatle ekleyin veya yeni bir hedef kökünde yeniden başlatın.
OAuth süresinin dolması, hız sınırlaması, geçici sunucu hataları ve kesintiye uğrayan parçalar için belirlenmiş sınırlar içinde yeniden deneme yapılır. Kimlik doğrulama hataları veya kalıcı izin hataları programı durdurur. Hatanın nedenini anlayana kadar günlükleri, kontrol noktasını ve hazırlama alanının içeriğini koruyun.
Gerçek bir kabul testi gerçekleştirin
- Boş dosyalar, büyük dosyalar, derin klasör yolları, Unicode adlar ve Google'a özgü belgeler içeren küçük bir klasörle başlayın.
- Önce --dry-run komutunu çalıştırın ve envanterin toplam bayt değerini sağlayıcı arayüzündeki değerle karşılaştırın.
- İlk üretim toplu işlemi sırasında yerel boş alanı ve hedef kotasını birbirinden bağımsız olarak izleyin.
- Yeniden indirme doğrulamasını etkin tutun ve kontrol noktasını geçiş kayıtlarınızla birlikte arşivleyin.
- Hedefteki temsili PDF'leri, Office dosyalarını, görselleri, videoları, arşivleri ve dönüştürülmüş yerel belgeleri açın.
- Beklenen klasör ve dosya sayılarını karşılaştırın, atlanan veya başarısız olan her öğeyi araştırın ve erişimi ikinci bir kullanıcıyla test edin.
- Tanımlanmış bir örtüşme süresi boyunca kaynağı değiştirmeyin. Bu betik kaynağı hiçbir zaman silmez.
Sık sorulan sorular
Python betiği kaynak dosyaları hiç siler mi?
Hayır. Kaynaktan silme özelliği uygulanmamıştır. Motor, dosyaları kaynaktan indirip ayrı bir hedef köküne yazar; başarılı doğrulama yalnızca geçici yerel hazırlama kopyasını kaldırır.
Her iki yönde de aktarım yapabilir mi?
Evet. Google Drive veya OneDrive'ı kaynak, diğer sağlayıcıyı ise hedef olarak ayarlayın. Her geçiş için benzersiz bir kontrol noktası ve hedef kök dizini kullanın.
Paylaşım izinlerini ve dosya geçmişini koruyor mu?
Hayır. Bu sürüm, dosyaların güncel içeriğini ve klasör yollarını kopyalar. Paylaşım ACL'leri, herkese açık bağlantılar, sürümler, yorumlar, etiketler, saklama ilkeleri ve kuruma özgü meta veriler ayrı bir geçiş ve doğrulama gerektirir.
Yeni yüklenen dosyalar neden yeniden indiriliyor?
Yüklemenin kabul edilmesi ve meta veri boyutu, hedefteki baytların bire bir geri okunabildiğini kanıtlamaz. Yeniden indirme modu, hedef içerik üzerinden SHA-256 değerini hesaplar ve yalnızca bire bir eşleşme durumunda kontrol noktası oluşturur.
Bu, Google veya Microsoft'un resmî bir aracı mı?
Hayır. Bu, MIT lisansı altında yayımlanmış bağımsız bir FileArk referans uygulamasıdır. Kodu inceleyin, kritik olmayan verilerle test edin ve sağlayıcınızın ve kuruluşunuzun ilkelerine uyun.
Bu rehberde yararlanılan resmî kaynaklar
- Google Workspace Öğrenim Merkezi: OneDrive'dan Google Drive'a geçiş
- Google Drive Yardım: depolama ve dosya davranışı
- Microsoft Desteği: OneDrive'a dosya yükleme ve kaydetme
- Google Drive API: dosyaları indirme ve dışa aktarma
- Google Drive API: devam ettirilebilir yüklemeler
- Google Drive API: depolama kotası alanları
- Microsoft Graph: sürücü alt öğelerini listeleme
- Microsoft Graph: devam ettirilebilir yükleme oturumu oluşturma
- Microsoft Graph: OneDrive kota kaynağı