Base de connaissances

1 000 FAQ, 500 tutoriels et vidéos explicatives. Ici, il n'y a que des solutions !

Importer des données sur kDrive depuis iCloud

Ce guide détaille comment importer des données iCloud à l'aide de rClone sur kDrive Infomaniak.

 

✘ INDISPONIBLE avec
kSuite gratuit / kSuite Standard
my kSuite / my kSuite+ (ik.me, etik.com, ikmail.com) 


 

Préambule

  • Apple ne proposant pas d'API comme ses concurrents, une solution pour rapatrier les documents d'un iCloud Drive est d'installer l'app kDrive macOS afin de synchroniser le dossier icloud qui doit se trouver dans votre bibliothèque. Le guide ci-dessous propose une alternative solide.
  • kDrive prend en charge le streaming upload de rclone via WebDAV, ceci jusqu'à 50 Go (extensible à 100 Go) pour éviter des abus, avec gestion automatique des erreurs si la limite est dépassée sans spécification préalable de la taille via Content-Length.

 

1. Configurer rclone pour l'accès aux drives

 

Installation de rclone sur votre ordinateur

Il existe une version de rclone avec interface graphique (GUI) mais il est tout à fait possible de faire cela en ligne de commande (CLI):

  1. Installez rclone depuis une application de type Terminal sur votre appareil, en tapant toute la commande suivante:
    sudo -v ; curl https://rclone.org/install.sh | sudo bash
  2. Entrez le mot de passe de votre session sur votre ordinateur pour débuter l'installation:

 

Configuration du disque distant (iCloud) sur rclone

  1. Une fois rclone installé, entrez la commande rclone config.
  2. Choisissez ensuite de configurer une nouvelle importation à distance en répondant n pour New remote.
  3. Nommez le disque à distance, par exemple appledrive:
  4. Choisissez ensuite le type de disque à importer en répondant iclouddrive ce qui correspondant à iCloud Drive parmi les choix proposés.
  5. Indiquez à rclone  le apple_id en entrant votre Apple ID (une adresse mail en principe).
  6. Choisissez d'utiliser votre propre mot de passe lié au compte Apple ID (y).
  7. Entrez votre mot de passe deux fois comme demandé:
  8. Répondez “Non” n à la question sur la “configuration avancée”.
  9. Une fenêtre sur votre appareil doit s'ouvrir pour vous prévenir d'une connexion distante ; autorisez-la:
  10. Une fenêtre sur votre appareil doit s'ouvrir avec un code 2FA ; copiez-le:
  11. Collez le code quand rclone vous le demande.
  12. Répondez “Oui” y à la dernière question si toutes les informations présentées sont correctes.

 

Configuration du disque de destination (kDrive) sur rclone

Il est possible d'agir directement sur le fichier de configuration de rclone en y collant votre configuration kDrive sous la forme par exemple:

[kDrive]
type = webdav
url = https://kDrive_ID_HERE.connect.kdrive.infomaniak.com/
vendor = other
user = user@email.com
pass = PASSWORD_HERE_OR_APP_PASSWORD_IF_2FA

Mais voici comment procéder étape par étape comme pour la configuration précédente:

  1. Toujours sur le terminal, entrez n pour une nouvelle configuration de disque et entrez le nom kDrive pour reconnaitre votre disque de destination:
  2. Choisissez ensuite le type de disque à importer en répondant webdav ce qui correspondant à une configuration WebDAV parmi les choix proposés.
  3. Entrez les informations suivantes:
    • url = l'accès direct au kDrive (prenez connaissance de cet autre guide au sujet de l'ID kDrive pour l'URL de connexion)
    • vendor = rclone (l'option n°6)
    • user = adresse mail de connexion au compte utilisateur Infomaniak
  4. Répondez “Oui” y pour la question sur le mot de passe puis entrez le mot de passe:
    • mot de passe d'application en cas de double authentification activée ou celui de votre compte utilisateur Infomaniak si vous n'avez pas activé la 2FA.
  5. Laissez vide le bearer_token puis répondez “Non” n à la question sur la “configuration avancée”.
  6. Répondez “Oui” y à la dernière question et vos 2 disques s'affichent:

 

2. Copier les données de iCloud vers kDrive

Prérequis

  • Consulter les options à disposition sur le guide officiel avant de démarrer une importation.

Exemple de commande permettant de lancer une copie de vos données iCloud vers la racine de votre kDrive:

sudo rclone copy appledrive: kDrive:

Ceci aura pour effet de démarrer instantanément la copie de vos dossiers, sous-dossiers et contenus iCloud vers le dossier personnel de votre kDrive Infomaniak !

 

Précisions concernant les dates de vos photos exportées

Si vous exportez vos photos depuis iCloud vers kDrive Infomaniak, soyez vigilant concernant les métadonnées de dates. Lors de l'exportation, les dates de création des fichiers peuvent être modifiées et remplacées par la date d'exportation au lieu de la date originale de prise de vue.

Voici un script pour utilisateurs avertis qui permet de rétablir les bonnes données à vos fichiers à partir des informations EXIF (il est recommandé de traiter des lots de 7000 photos max. pour éviter un plantage):

  1. Téléchargez ExifTool https://exiftool.org/index.html (macOS Package).
  2. Installez l'application en autorisant son ouverture au préalable si nécessaire:
  3. Ouvrez Script Editor (situé dans votre dossier Applications > Utilitaires):
  4. Cliquez sur Nouveau document.
  5. Copiez-collez le long script proposé ci-dessous vers la fenêtre de Script Editor.
  6. Cliquez sur Exécuter pour démarrer le script, une fenêtre s'ouvre:
  7. Sélectionnez le dossier à analyser.
  8. Laissez ensuite le script tourner, il modifiera les dates ou écrira les erreurs dans un fichier errors.txt sur le bureau.

Le script à copier-coller entièrement:

-- replace file date with EXIF creation date or date from name after the first dash -

tell application "Finder"
    set FolderPath to choose folder with prompt "Select the folder containing the files to update"
    my processFolder(FolderPath)
end tell

on processFolder(aFolder)
    tell application "Finder"
        -- process files:
        set fileList to files of aFolder
        repeat with eachFile in fileList
            -- process a single file
            
            set theFile to eachFile
            set AppleScript's text item delimiters to {""}
            set fileName to name of eachFile --get the file name
            
            set eachFile to eachFile as string --file path
            set hasDate to true --initialize date found flag
            
            try
                --get date if available
                set photoDate to do shell script "/usr/local/bin/exiftool -DateTimeOriginal " & quoted form of POSIX path of eachFile
                if photoDate is "" then set photoDate to do shell script "/usr/local/bin/exiftool -CreationDate " & quoted form of POSIX path of eachFile
                if photoDate is "" then set photoDate to do shell script "/usr/local/bin/exiftool -CreateDate " & quoted form of POSIX path of eachFile
                
                if photoDate is "" then
                    set hasDate to false --check if date was found
                end if
                
            on error
                set hasDate to false -- error retrieving date
                set photoDate to ""
            end try
            
            if length of photoDate > 20 then
                --format extracted date
                set x to (length of photoDate) - 33
                set OriginalDate to text -x thru -1 of photoDate
                set formattedDate to text 1 thru 5 of OriginalDate
                set theYear to formattedDate
                set formattedDate to formattedDate & text 7 thru 8 of OriginalDate
                set theMonth to text 7 thru 8 of OriginalDate
                set formattedDate to formattedDate & text 10 thru 11 of OriginalDate
                set theDay to text 10 thru 11 of OriginalDate
                set formattedDate to formattedDate & text 13 thru 14 of OriginalDate
                set theHour to text 13 thru 14 of OriginalDate
                set formattedDate to formattedDate & text 16 thru 17 of OriginalDate
                set theMinute to text 16 thru 17 of OriginalDate
                set formattedDate to formattedDate & "." & text 19 thru 20 of OriginalDate
                set theSecond to text 19 thru 20 of OriginalDate
                set newName to theYear & "-" & theMonth & "-" & theDay & " " & theHour & "." & theMinute & "." & theSecond
                
                set testValue to formattedDate as string --check if found date is 000
                if testValue is " 000000000000.00" then
                    set hasDate to false
                else
                    -- set file date to original EXIF date and write to log
                    do shell script "touch -t " & formattedDate & " " & quoted form of POSIX path of eachFile
                    set logFile to open for access ((path to desktop folder as text) & "Date Found.txt") as text with write permission
                    write "Original date found for file: " & OriginalDate & " " & eachFile & return to logFile starting at eof
                    close access logFile
                end if
            end if
            
            if hasDate is false then
                -- get date from file name after first dash
                set nb to ""
                set nameDate to ""
                set fileName to fileName as string
                set savedDelimiters to AppleScript's text item delimiters --save delimiters
                set AppleScript's text item delimiters to {"-"} --split on "-"
                set nb to offset of "-" in fileName
                if nb is not 0 then
                    set AppleScript's text item delimiters to savedDelimiters --restore delimiters
                    set nameDate to characters (nb + 1) thru (nb + 8) of fileName as string
                    set nameDate to nameDate & "1200.00"
                    set cmd1 to "/usr/local/bin/exiftool -datetimeoriginal=" & nameDate & " " & quoted form of POSIX path of eachFile
                    set cmd2 to "/usr/local/bin/exiftool -createdate=" & nameDate & " " & quoted form of POSIX path of eachFile
                end if
                try
                    -- write date from name to EXIF
                    do shell script cmd1
                    do shell script cmd2
                    do shell script "touch -t " & nameDate & " " & quoted form of POSIX path of eachFile
                    do shell script "rm " & quoted form of POSIX path of (eachFile & "_original")
                on error
                    -- if date from name is invalid, log the error
                    set logFile to open for access ((path to desktop folder as text) & "Date Error.txt") as text with write permission
                    write "No valid date found in file name: " & eachFile & return to logFile starting at eof
                    close access logFile
                end try
            end if
        end repeat
        
        -- process folders:
        set folderList to folders of aFolder
        repeat with eachSubfolder in folderList
            -- process a subfolder
            my processFolder(eachSubfolder)
        end repeat
    end tell
end processFolder

tell application "Finder"
    display dialog "Done! All files processed." buttons {"Close"}
end tell

Cette FAQ a été utile?