Recherche de site Web

Comment gérer des fichiers sur le stockage cloud avec Rclone sous Linux


Rclone est un programme de ligne de commande gratuit et open source permettant de gérer des fichiers sur des services de stockage cloud tels que Google Drive, Backblaze B2, Amazon S3 et bien d'autres. L'application est écrite dans le langage de programmation Go et son code source est hébergé sur GitHub. Dans ce didacticiel, nous apprenons comment installer Rclone sur les distributions Linux les plus utilisées et comment effectuer des opérations de base telles que la copie, la synchronisation, le déplacement et la suppression de données. Au cours du processus, nous voyons également comment obtenir les informations d'identification de l'API Google Drive et comment configurer une télécommande Google Drive pour Rclone.

Dans ce didacticiel, vous apprendrez :

  • Comment installer Rclone sur certaines des distributions Linux les plus utilisées
  • Comment obtenir les informations d'identification de l'API Google Drive et configurer une télécommande Google Drive Rclone
  • Comment utiliser Rclone pour gérer les données sur le stockage cloud

Installation

Rclone est disponible dans les référentiels officiels de toutes les principales distributions Linux. Pour installer le programme sur Fedora, nous exécutons :

$ sudo dnf install rclone

La même commande peut être utilisée pour installer Rclone sur RHEL, Rocky Linux et AlmaLinux, cependant, sur ces distributions, avant de procéder à l'installation, nous devons ajouter le référentiel EPEL aux sources du logiciel système.

Sur Debian et les distributions basées sur Debian, nous installons Rclone en utilisant apt :

$ sudo apt install rclone

Rclone est également disponible dans le dépôt « extra » d'Archlinux ; nous pouvons installer le package avec pacman :

$ sudo pacman -S rclone

Obtention des informations d'identification API pour Google Drive

Pour les besoins de ce didacticiel, nous utiliserons Google Drive comme terrain de test de stockage cloud pour Rclone. Bien qu'il soit possible d'utiliser les informations d'identification natives de l'API Google Drive de Rclone, celles-ci sont partagées entre tous les utilisateurs de Rclone et ont un nombre limité de requêtes par seconde. Pour garantir l’opérabilité, nous souhaiterons peut-être créer le nôtre.

Pour obtenir nos informations d'identification Google Drive, nous accédons à Google Cloud Console et ajoutons un nouveau projet. On clique sur le menu déroulant « Sélectionner un projet », puis sur « Nouveau projet » :

Nous devons choisir un nom pour notre projet. Ici, nous utilisons simplement « rclone » :

Une fois prêt, on clique sur le bouton « créer ». Le projet sera créé avec un identifiant généré aléatoirement. Pour sélectionner notre projet, nous cliquons à nouveau sur le menu déroulant « Sélectionner un projet ». Cette fois, cependant, nous choisissons le projet que nous venons de créer :

Comme prochaine étape, nous devons ajouter l'API Google Drive à notre projet. Nous recherchons « Google Drive API », et cliquons sur le premier résultat :

Une fois sur la page API Google Drive, on active l'API en cliquant sur le bouton « Activer » ; nous serons redirigés vers la page de détail du service API. À ce stade, nous cliquons sur l’élément « Credentials » dans le menu vertical de gauche :

Nous devons maintenant configurer un écran de consentement pour notre projet, nous cliquons donc sur le bouton « Configurer l'écran de consentement » :

On choisit « Externe » comme type d’utilisateur, puis on clique sur le bouton « Créer » :

Sur la page suivante, nous devons fournir des informations sur notre application. Au minimum, nous devons saisir le « Nom de l'application », un e-mail d'assistance utilisateur et les informations de contact du développeur. Lorsque nous sommes prêts, nous cliquons sur « Enregistrer et continuer » :

Ensuite, nous devons sélectionner les étendues à attribuer à notre application. Ce sont essentiellement les privilèges dont disposera l’application sur le stockage Google Drive. Pour ajouter un scope, on clique sur le bouton « Ajouter ou supprimer des scopes », puis, pour s'assurer que Rclone est capable d'effectuer tout type d'opérations, on choisit ../auth-docs, ../auth-drive et ../auth/drive.metadata.readonly :

Une fois cela fait, nous cliquons sur le bouton « Mettre à jour », puis sur « Enregistrer et continuer ». Nous devons maintenant ajouter notre propre compte en tant qu'utilisateur test. Nous cliquons sur le bouton « Ajouter des utilisateurs » et nous saisissons l'adresse e-mail que nous souhaitons utiliser. Une fois terminé, on clique sur le bouton « Ajouter », puis, encore une fois, sur « Enregistrer et continuer » :

Sur la page suivante, nous pourrons jeter un œil au résumé des paramètres de l'application. À ce stade, nous devons cliquer à nouveau sur l'entrée « Credentials » dans le menu vertical de gauche. Une fois dans la page des identifiants, on clique sur « Créer des identifiants », puis sur « ID client OAuth » :

Sur la page suivante, nous sélectionnons « Application de bureau » comme type d'application. Nous pouvons laisser le nom du client généré automatiquement. Lorsque nous sommes prêts, nous cliquons sur le bouton « Créer » :

Les informations d'identification OAuth seront générées. Nous devons les noter (nous pourrons de toute façon les récupérer facilement plus tard depuis la page « Identifiants ») :

Comme dernière étape, on clique sur l'écran de consentement OAuth dans le menu vertical de gauche, puis sur le bouton « Publier l'application » :

Théoriquement, nous devrions préparer et soumettre l’application à Google pour vérification, mais nous devrions quand même pouvoir utiliser « l’application ». Maintenant que nous disposons de nos propres informations d'identification de l'API Google Drive, nous pouvons voir comment configurer une télécommande Rclone.

Création d'une configuration Rclone Google Drive

Le moyen le plus simple de créer une configuration à distance Google Drive pour Rclone consiste à utiliser la configuration guidée. Pour lancer le « assistant », on lance :

$ rclone config

Rclone nous demandera de choisir une action. Nous sélectionnons « n » pour créer une nouvelle télécommande :

No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n

Nous devons fournir un nom pour la « télécommande ». Dans ce cas, nous utilisons simplement « gdrive » :

name> gdrive

Ensuite, nous devons choisir le stockage cloud approprié dans une liste. La position exacte de Google Drive dans la liste peut varier. Sur les versions récentes sur Rclone, il devrait être 18 :

Storage> 18

À ce stade, nous devons saisir les informations d'identification Google Drive que nous avons générées à l'étape précédente :

client_id> <your-client-id-here>
client_secret> <your-client-secret-here>

Après avoir entré nos informations d'identification, nous devons sélectionner les étendues que Rclone doit utiliser. Dans ce cas, on choisit « 1 » :

Choose a number from below, or type in your own value.
 1 / Full access all files, excluding Application Data Folder.
   \ "drive"
 2 / Read-only access to file metadata and file contents.
   \ "drive.readonly"
   / Access to files created by rclone only.
 3 | These are visible in the drive website.
   | File authorization is revoked when the user deauthorizes the app.
   \ "drive.file"
   / Allows read and write access to the Application Data folder.
 4 | This is not visible in the drive website.
   \ "drive.appfolder"
   / Allows read-only access to file metadata but
 5 | does not allow any access to read or download file content.
   \ "drive.metadata.readonly"
scope> 1

Dans l'invite suivante, Rclone nous demande si nous voulons utiliser un fichier JSON d'informations d'identification de compte de service, nous pouvons laisser le champ vide et appuyer simplement sur « Entrée » :

Option service_account_file.
Service Account Credentials JSON file path.
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`.
Enter a value. Press Enter to leave empty.
service_account_file>

Nous pouvons également ignorer la modification de la configuration avancée :

Edit advanced config?
y) Yes
n) No (default)
y/n> n

Ensuite, nous devons choisir si nous voulons utiliser une invite du navigateur pour authentifier Rclone avec notre application Google Drive. Nous répondons par l'affirmative :

Use web browser to automatically authenticate rclone with remote?
* Say Y if the machine running rclone has a web browser you can use
* Say N if running rclone on a (remote) machine without web browser access
If not sure try Y. If Y failed, try N.

y) Yes (default)
n) No
y/n> y

Dès que nous appuyons sur Entrée, un onglet de navigateur s'ouvrira. Comme nous l'avons dit précédemment, nous verrons un avertissement puisque l'application n'est pas vérifiée par Google. Pour procéder à l'authentification, on clique sur « Avancé », puis sur « Aller à rclone (unsafe) » :

Nous devons confirmer que nous souhaitons accorder à l'application les privilèges demandés. Pour confirmer, on clique sur « Continuer » :

De retour dans le terminal, nous pouvons choisir si nous voulons configurer un Shared Drive.  Dans ce cas, nous pouvons apporter une réponse négative :

Configure this as a Shared Drive (Team Drive)?

y) Yes
n) No (default)
y/n> n

Enfin, pour confirmer et conserver la télécommande, nous répondons par l'affirmative à la dernière invite :

Keep this "gdrive" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y

Pour quitter l'assistant, nous sélectionnons « q » dans la dernière invite :

Télécommandes actuelles :

Name Type
==== ====
gdrive drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

Utiliser rclone

Rclone fournit de nombreuses commandes que nous pouvons utiliser pour gérer les données sur le stockage cloud. Ici, nous ne pouvons pas fournir une liste détaillée, mais nous pouvons voir comment effectuer des opérations de base telles que la copie, la synchronisation, le déplacement et la suppression de données.

Liste des fichiers et répertoires sur la télécommande

Pour obtenir une liste des fichiers actuellement hébergés sur un stockage cloud, nous exécutons rclone avec la commande ls. Pour voir les fichiers disponibles sur la télécommande Google Drive, nous exécuterions :

$ rclone ls gdrive:/

La commande renvoie le résultat suivant :

37 file1.txt
 5 file0.txt

Comme vous pouvez le constater, il n'existe que deux fichiers hébergés sur Google Drive : file1.txt et file0.txt : leur taille est indiquée en début de ligne, en octets. . Pour obtenir plus d'informations sur chaque fichier, nous pouvons utiliser la commande lsl, qui renvoie également l'heure de modification :

$ rclone lsl gdrive:
       37 2024-05-24 14:56:03.931000000 file1.txt
        5 2024-05-24 14:55:55.889000000 file0.txt

Les commandes ls et lsl fonctionnent de manière récursive, elles répertorient donc les fichiers également contenus dans des sous-répertoires, mais n'incluent pas de répertoires dans leur sortie. Pour récupérer réellement une liste des répertoires existant sur la télécommande, nous utilisons la commande lsd :

$ rclone lsd gdrive:
           -1 2024-05-24 15:47:24 -1 mydir

Contrairement à ls et lsl, lsd fonctionne de manière non récusive, sauf si nous utilisons l'option -R :

$ rclone lsd -R gdrive: 
           -1 2024-05-24 15:47:24 -1 mydir
           -1 2024-05-24 15:52:41 -1 mydir/one

Pour lister les fichiers et répertoires et obtenir une sortie facile à analyser, adaptée à être utilisée dans des scripts, nous pouvons utiliser deux autres commandes : lsf et lsjson. Les deux fonctionnent de manière non récursive ; le premier renvoie uniquement le nom des fichiers et des répertoires, un par ligne :

$ rclone lsf gdrive:
file0.txt
file1.txt
mydir/

Ce dernier, à la place, renvoie la sortie au format JSON :

[
{"Path":"file0.txt","Name":"file0.txt","Size":5,"MimeType":"text/plain","ModTime":"2024-05-24T12:55:55.889Z","IsDir":false,"ID":"1keyQCpqiyQbiF6FWUjR4Mb2petECgFkE"},
{"Path":"file1.txt","Name":"file1.txt","Size":37,"MimeType":"text/plain","ModTime":"2024-05-24T12:56:03.931Z","IsDir":false,"ID":"1Aia5gGkvGEe40BlXQah7g3DZWjnCkxxJ"},
{"Path":"mydir","Name":"mydir","Size":-1,"MimeType":"inode/directory","ModTime":"2024-05-24T13:47:24.355Z","IsDir":true,"ID":"1qR6DF7ybJ29ghcUowvqiBowfxDNQf7yg"}
]

Copie de fichiers et de répertoires

Pour copier des fichiers depuis et vers un stockage distant, nous utilisons la commande copy. Supposons que nous souhaitions copier file0.txt de Google Drive vers le répertoire de travail actuel sur localhost ; nous courrions :

$ rclone copy gdrive:/file0.txt .

Nous pouvons copier un répertoire de la même manière, mais nous devons nous rappeler que Rclone copie le contenu d'un répertoire, pas le répertoire lui-même. De plus, il ignore la copie des sous-répertoires vides, sauf si nous utilisons l'option --create-empty-src-dirs.

Lors de l'utilisation de la copie, les fichiers existants sur la source qui n'existent pas sur la destination sont créés et les fichiers existants sont mis à jour. Parfois, nous souhaitons modifier ce comportement afin que les fichiers existants sur la destination restent intacts. Un cas courant est celui de la copie d'une sauvegarde d'un référentiel local vers un référentiel distant, pour éviter de propager d'éventuelles corruptions d'anciens instantanés. Pour implémenter un tel comportement, nous pouvons utiliser l'option --immutable : cela provoque l'échec d'une opération de copie si elle implique la modification de fichiers existants sur la destination (notez cependant que ceci, au moment de l'écriture,ne fonctionne pas lors de la copie de fichiers uniques – voir ce bug ouvert sur le dépôt Rclone GitHub).

Déplacer et renommer des fichiers et des répertoires

Pour déplacer des fichiers, nous utilisons la commande move. Supposons que nous souhaitions déplacer file0.txt de la télécommande vers notre hôte local. Nous courrions :

$ rclone move gdrive:/file0.txt .

Puisqu'il s'agit d'une opération potentiellement destructrice, nous souhaiterons peut-être d'abord lancer la commande avec l'option --dry-run, qui simule simplement l'opération.

Si nous voulons renommer un fichier, nous utilisons la commande moveto. Supposons que nous souhaitions renommer file0.txt en file00.txt sur la télécommande ; nous courrions :

$ rclone moveto gdrive:/file0.txt gdrive:/file00.txt

La même commande peut être utilisée si nous voulons télécharger un fichier, mais le stocker sous un autre nom :

$ rclone moveto file0.txt gdrive:/file00.txt

Synchronisation des répertoires avec la commande sync

Une autre commande que nous pouvons utiliser pour copier des données depuis et vers un stockage distant est sync. La principale différence entre sync et copy est que le premier crée une copie miroir de la source vers la destination. En d'autres termes, les fichiers qui existent sur la source, mais pas sur la destination, sont copiés et les fichiers modifiés sont mis à jour. De plus, les fichiers qui n'existent pas sur la source mais qui sont présents sur la destination sont supprimés.

Supposons que nous souhaitions synchroniser le contenu du répertoire local mydir avec le même répertoire sur le distant (il est créé s'il n'existe pas) ; nous courrions :

$ rclone sync mydir gdrive:/mydir

Vous comprendrez facilement pourquoi cette commande doit être utilisée avec prudence. Il est possible d'utiliser l'option --imutable également lors de l'utilisation de la commande sync ; cela entraînera le refus de la commande de mettre à jour les fichiers modifiés, alors qu'elle pourra toujours supprimer les fichiers sur la destination qui n'existent pas sur la source.

Suppression de fichiers et de répertoires

Pour supprimer des fichiers et des répertoires, nous pouvons utiliser la commande delete. Supposons que nous souhaitions supprimer le fichier file0.txt sur la télécommande, nous exécuterions :

$ rclone delete gdrive:/file0.txt

Lorsque nous utilisons la commande delete sur un répertoire, seul le contenu du répertoire est supprimé, tandis que le répertoire lui-même reste en place. Si le répertoire contient des sous-répertoires, ils resteront également intacts, sauf si nous utilisons l'option --rmdirs (le répertoire racine sera toujours conservé).

Pour supprimer tous les fichiers d'un répertoire sauf certains, nous pouvons spécifier un modèle comme argument de l'option --exclude. Pour supprimer tous les fichiers du répertoire « monrép », sauf ceux avec l'extension « .txt », par exemple, nous lancerions :

$ rclone delete --exclude=*.txt gdrive:/mydir

Les fichiers peuvent également être filtrés en fonction de leur taille et d'autres paramètres. À titre d'exemple, pour supprimer uniquement les fichiers >= 100 Mo, nous exécuterions :

$ rclone delete --min-size=100MiB gdrive:/mydir

Pour garantir que nous supprimons uniquement des fichiers uniques, nous pouvons utiliser la commande deletefile. Enfin, pour supprimer un répertoire ainsi que son contenu, nous pouvons utiliser la commande purge :

$ rclone purge gdrive:/mydir

Par défaut, les fichiers et répertoires supprimés sont déplacés vers la corbeille de Google Drive : pour supprimer un fichier en ignorant la corbeille, nous pouvons cependant utiliser l'option --drive-use-trash=false. Pour lister les fichiers supprimés, nous utilisons la commande ls avec l'option --drive-trashed-only. Enfin, pour vider la corbeille, nous utilisons la commande cleanup :

$ rclone cleanup gdrive:/

Monter le stockage distant en tant que système de fichiers

Rclone est capable de monter un stockage distant en tant que disque réseau, en utilisant fuse (système de fichiers dans l'espace utilisateur). Dans notre cas, pour monter la télécommande « gdrive » sur le répertoire ~/Public, nous exécuterions :

$ rclone mount gdrive:/ ~/Public

Lorsqu'elle est lancée au premier plan, la commande bloque le terminal tant que la télécommande est montée. Pour démonter le système de fichiers, nous pouvons simplement appuyer sur CTRL-c ou envoyer explicitement un signal SIGINT ou SIGTERM au processus.

Pensées finales

Dans ce didacticiel, nous avons vu comment installer Rclone sur certaines des distributions Linux les plus utilisées et comment l'utiliser pour effectuer des opérations de base sur un stockage distant. Au cours du processus, nous avons appris comment obtenir les informations d'identification de l'API Google Drive et comment créer une configuration à distance Google Drive pour Rclone. Il y a bien plus à faire avec Rclone que ce dont nous avons parlé dans cet article ; pour en savoir plus sur toutes les commandes disponibles et leurs options, veuillez consulter le site officiel du projet ou exécutez chaque commande avec l'option -h.

Articles connexes: