Wednesday, 16 July 2025

Copy drive ke drive saya Folder Kelas 12

 # 🔧 MOUNT GOOGLE DRIVE AND AUTH
from google.colab import drive
drive.mount('/content/drive')

!pip install -U -q PyDrive

import os
import shutil
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials

auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive_ = GoogleDrive(gauth)

# 📁 ID folder sumber (dari link yang Guru Duan berikan)
source_folder_id = '19qaEHX43JX_q6qV-fg93npXfSuit5eXS'

# 📁 Folder tujuan di My Drive
target_root = "/content/drive/MyDrive/Folder Kelas 12"
os.makedirs(target_root, exist_ok=True)

# 🔁 Fungsi rekursif untuk menyalin isi folder
def copy_folder_recursive(source_id, target_path):
    file_list = drive_.ListFile({'q': f"'{source_id}' in parents and trashed=false"}).GetList()
    for file1 in file_list:
        file_title = file1['title']
        file_id = file1['id']
        mimetype = file1['mimeType']
        
        if mimetype == 'application/vnd.google-apps.folder':
            print(f"📁 Membuat subfolder: {file_title}")
            subfolder_path = os.path.join(target_path, file_title)
            os.makedirs(subfolder_path, exist_ok=True)
            copy_folder_recursive(file_id, subfolder_path)
        else:
            print(f"⬇️ Mengunduh: {file_title}")
            downloaded = drive_.CreateFile({'id': file_id})
            try:
                downloaded.GetContentFile(file_title)
                print(f"⬆️ Menyalin ke Drive: {file_title}")
                shutil.copy(file_title, os.path.join(target_path, file_title))
                os.remove(file_title)
            except:
                print(f"⚠️ Gagal mengunduh: {file_title}")

# 🚀 Jalankan penyalinan
print("🚀 Memulai penyalinan folder dan semua isinya ke folder 'Folder Kelas 12'...")
copy_folder_recursive(source_folder_id, target_root)
print("✅ Selesai menyalin semua file dan subfolder.")

Share:

0 comments:

Post a Comment