Website-Suche

So verwalten Sie Dateien im Cloud-Speicher mit Rclone unter Linux


Rclone ist ein kostenloses Open-Source-Befehlszeilenprogramm zum Verwalten von Dateien auf Cloud-Speicherdiensten wie Google Drive, Backblaze B2, Amazon S3 und vielen mehr. Die Anwendung ist in der Programmiersprache Go geschrieben, und ihr Quellcode wird auf GitHub gehostet. In diesem Tutorial lernen wir, wie man Rclone auf den am häufigsten verwendeten Linux-Distributionen installiert und wie man grundlegende Operationen wie das Kopieren, Synchronisieren, Verschieben und Löschen von Daten durchführt. Dabei erfahren Sie auch, wie Sie die Anmeldeinformationen für die Google Drive-API abrufen und wie Sie eine Google Drive-Fernbedienung für Rclone konfigurieren.

In diesem Tutorial lernen Sie:

  • So installieren Sie Rclone auf einigen der am häufigsten verwendeten Linux-Distributionen
  • So erhalten Sie Google Drive-API-Anmeldeinformationen und konfigurieren eine Google Drive Rclone-Fernbedienung
  • So verwenden Sie Rclone zur Verwaltung von Daten im Cloud-Speicher

Installation

Rclone ist in den offiziellen Repositories aller wichtigen Linux-Distributionen verfügbar. Um das Programm auf Fedora zu installieren, führen wir Folgendes aus:

sudo dnf install rclone

Der gleiche Befehl kann verwendet werden, um Rclone auf RHEL, Rocky Linux und AlmaLinux zu installieren, jedoch müssen wir auf diesen Distributionen, bevor wir mit der Installation fortfahren, das EPEL-Repository zu den Systemsoftwarequellen hinzufügen.

Unter Debian und Debian-basierten Distributionen installieren wir Rclone mit apt:

sudo apt install rclone

Rclone ist auch im Archlinux "extra"-Repository verfügbar; Wir können das Paket mit Pacman installieren:

sudo pacman -S rclone

Abrufen von API-Anmeldeinformationen für Google Drive

Für dieses Tutorial werden wir Google Drive als Cloud-Speicher-Testgelände für Rclone verwenden. Es ist zwar möglich, die nativen Google Drive-API-Anmeldeinformationen von Rclone zu verwenden, diese werden jedoch von allen Rclone-Benutzern gemeinsam genutzt und haben eine begrenzte Anzahl von Abfragen pro Sekunde. Um die Funktionsfähigkeit zu gewährleisten, möchten wir vielleicht unsere eigenen erstellen.

Um unsere Google Drive-Anmeldeinformationen zu erhalten, greifen wir auf die Google Cloud Console zu und fügen ein neues Projekt hinzu. Wir klicken auf das Dropdown-Menü "Projekt auswählen" und dann auf "Neues Projekt":

Wir müssen einen Namen für unser Projekt wählen. Hier verwenden wir einfach "rclone":

Sobald wir fertig sind, klicken wir auf die Schaltfläche "Erstellen". Das Projekt wird mit einer zufällig generierten ID erstellt. Um unser Projekt auszuwählen, klicken wir erneut auf das Dropdown-Menü "Projekt auswählen". Dieses Mal haben wir uns jedoch für das Projekt entschieden, das wir gerade erstellt haben:

Als nächsten Schritt müssen wir die Google Drive API zu unserem Projekt hinzufügen. Wir suchen nach "Google Drive API" und klicken auf das erste Ergebnis:

Sobald wir uns auf der Google Drive API-Seite befinden, aktivieren wir die API, indem wir auf die Schaltfläche "Aktivieren" klicken. Wir werden auf die Detailseite des API-Dienstes weitergeleitet. An dieser Stelle klicken wir auf den Punkt "Anmeldeinformationen" im linken vertikalen Menü:

Wir müssen nun einen Einwilligungsbildschirm für unser Projekt konfigurieren, daher klicken wir auf die Schaltfläche "Einwilligungsbildschirm konfigurieren":

Wir wählen "Extern" als Benutzertyp und klicken dann auf die Schaltfläche "Erstellen":

Auf der nächsten Seite müssen wir Informationen über unsere App bereitstellen. Wir müssen mindestens den "App-Namen", eine E-Mail-Adresse des Benutzersupports und die Kontaktinformationen des Entwicklers eingeben. Wenn wir fertig sind, klicken wir auf "Speichern und fortfahren":

Als Nächstes müssen wir auswählen, welche Bereiche unserer Anwendung zugewiesen werden sollen. Dies sind im Grunde die Berechtigungen, die die Anwendung auf dem Google Drive-Speicher hat. Um einen Bereich hinzuzufügen, klicken wir auf die Schaltfläche "Bereiche hinzufügen oder entfernen" und wählen dann, um sicherzustellen, dass Rclone in der Lage ist, alle Arten von Operationen auszuführen, .. /auth-docs, .. /auth-drive und .. /auth/drive.metadata.readonly:

Sobald wir fertig sind, klicken wir auf die Schaltfläche "Aktualisieren" und dann auf "Speichern und fortfahren". Wir müssen nun unseren eigenen Account als Testnutzer hinzufügen. Wir klicken auf die Schaltfläche "Benutzer hinzufügen" und geben die E-Mail-Adresse ein, die wir verwenden möchten. Wenn wir fertig sind, klicken wir auf die Schaltfläche "Hinzufügen" und dann erneut auf "Speichern und fortfahren":

Auf der nächsten Seite können wir einen Blick auf die Zusammenfassung der Anwendungseinstellungen werfen. An dieser Stelle müssen wir erneut auf den Eintrag "Anmeldeinformationen" im linken vertikalen Menü klicken. Sobald wir uns auf der Seite mit den Anmeldeinformationen befinden, klicken wir auf "Anmeldeinformationen erstellen" und dann auf "OAuth-Client-ID":

Auf der nächsten Seite wählen wir als Anwendungstyp "Desktop-App" aus. Wir können den automatisch generierten Kundennamen belassen. Wenn wir fertig sind, klicken wir auf die Schaltfläche "Erstellen":

Die OAuth-Anmeldeinformationen werden generiert. Wir sollten sie uns notieren (wir können sie später sowieso leicht von der Seite "Credentials" abrufen):

Als letzten Schritt klicken wir im linken vertikalen Menü auf den OAuth-Zustimmungsbildschirm und dann auf die Schaltfläche "App veröffentlichen":

Theoretisch sollten wir die App vorbereiten und zur Verifizierung bei Google einreichen, aber wir sollten die "App" trotzdem verwenden können. Jetzt, da wir unsere eigenen Google Drive-API-Anmeldeinformationen haben, können wir sehen, wie man eine Rclone-Fernbedienung konfiguriert.

Erstellen einer Rclone Google Drive-Konfiguration

Der einfachste Weg, eine Google Drive-Remote-Konfiguration für Rclone zu erstellen, ist die Verwendung der geführten Einrichtung. Um den "Assistenten" zu starten, führen wir Folgendes aus:

rclone config

Rclone fordert uns auf, eine Aktion auszuwählen. Wir wählen "n", um eine neue Fernbedienung zu erstellen:

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

Wir müssen einen Namen für die "Fernbedienung" angeben. In diesem Fall verwenden wir einfach "gdrive":

name> gdrive

Als nächstes müssen wir den entsprechenden Cloud-Speicher aus einer Liste auswählen. Die genaue Position von Google Drive in der Liste kann variieren. Bei neueren Versionen auf Rclone sollte es 18 sein:

Storage> 18

An dieser Stelle müssen wir die Google Drive-Anmeldeinformationen eingeben, die wir im vorherigen Schritt generiert haben:

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

Nachdem wir unsere Anmeldeinformationen eingegeben haben, müssen wir die Bereiche auswählen, die Rclone verwenden soll. In diesem Fall wählen wir "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

In der nächsten Eingabeaufforderung fragt uns Rclone, ob wir eine JSON-Datei für die Anmeldeinformationen des Dienstkontos verwenden möchten, wir können das Feld leer lassen und einfach die Eingabetaste drücken:

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>

Wir können auch die Bearbeitung der erweiterten Konfiguration überspringen:

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

Als nächstes müssen wir auswählen, ob wir eine Browser-Eingabeaufforderung verwenden möchten, um Rclone mit unserer Google Drive-App zu authentifizieren. Wir antworten bejahend:

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

Sobald wir die Eingabetaste drücken, wird ein Browser-Tab geöffnet. Wie bereits erwähnt, wird eine Warnung angezeigt, da die App nicht von Google verifiziert wurde. Um mit der Authentifizierung fortzufahren, klicken wir auf "Erweitert" und dann auf "Gehe zu rclone (unsicher)":

Wir müssen bestätigen, dass wir der Anwendung die angeforderten Berechtigungen erteilen möchten. Zur Bestätigung klicken wir auf "Weiter":

Zurück im Terminal können wir auswählen, ob wir eine freigegebene Ablage konfigurieren möchten.  In diesem Fall können wir eine negative Antwort geben:

Configure this as a Shared Drive (Team Drive)?

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

Um die Fernbedienung zu bestätigen und zu behalten, antworten wir schließlich mit Ja auf die letzte Eingabeaufforderung:

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

Um den Assistenten zu beenden, wählen wir in der letzten Eingabeaufforderung "q" aus:

Aktuelle Fernbedienungen:

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

Verwenden von rclone

Rclone bietet viele Befehle, mit denen wir Daten im Cloud-Speicher verwalten können. Hier können wir keine detaillierte Liste bereitstellen, aber wir können sehen, wie grundlegende Vorgänge wie Kopieren, Synchronisieren, Verschieben und Löschen von Daten ausgeführt werden.

Auflisten von Dateien und Verzeichnissen auf der Fernbedienung

Um eine Liste der Dateien zu erhalten, die derzeit in einem Cloud-Speicher gehostet werden, führen wir rclone mit dem Befehl ls aus. Um die auf der Google Drive-Fernbedienung verfügbaren Dateien anzuzeigen, führen wir Folgendes aus:

rclone ls gdrive:/

Der Befehl gibt die folgende Ausgabe zurück:

37 file1.txt
 5 file0.txt

Wie Sie sehen können, gibt es nur zwei Dateien, die auf Google Drive gehostet werden: file1.txt und file0.txt: Ihre Größe wird am Anfang der Zeile in Bytes angegeben. Um mehr Informationen über jede Datei zu erhalten, können wir den Befehl lsl verwenden, der auch die Änderungszeit zurückgibt:

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

Sowohl der Befehl ls als auch der Befehl lsl arbeiten rekursiv, d.h. sie listen Dateien auf, die auch in Unterverzeichnissen enthalten sind, schließen aber keine Verzeichnisse in ihre Ausgabe ein. Um tatsächlich eine Liste der auf der Fernbedienung vorhandenen Verzeichnisse abzurufen, verwenden wir den Befehl lsd:

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

Im Gegensatz zu ls und lsl arbeitet lsd nicht-rekusiv, es sei denn, wir verwenden die 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

Um Dateien und Verzeichnisse aufzulisten und eine einfach zu analysierende Ausgabe zu erhalten, die für die Verwendung in Skripten geeignet ist, können wir zwei weitere Befehle verwenden: lsf und lsjson. Beide arbeiten nicht-rekursiv; Ersteres gibt nur den Namen von Dateien und Verzeichnissen zurück, eines pro Zeile:

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

Letzteres gibt stattdessen die Ausgabe im JSON-Format zurück:

[
{"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"}
]

Kopieren von Dateien und Verzeichnissen

Um Dateien von und auf einen Remote-Speicher zu kopieren, verwenden wir den Befehl copy. Angenommen, wir möchten file0.txt von Google Drive in das aktuelle Arbeitsverzeichnis auf localhost kopieren. Wir würden laufen:

rclone copy gdrive:/file0.txt .

Wir können ein Verzeichnis auf die gleiche Weise kopieren, aber wir müssen bedenken, dass Rclone den Inhalt eines Verzeichnisses kopiert, nicht das Verzeichnis selbst. Darüber hinaus überspringt es das Kopieren leerer Unterverzeichnisse, es sei denn, wir verwenden die Option --create-empty-src-dirs.

Bei der Verwendung von copy werden Dateien erstellt, die auf der Quelle vorhanden sind und auf dem Ziel nicht vorhanden sind, und vorhandene Dateien werden aktualisiert. Manchmal möchten wir dieses Verhalten so ändern, dass vorhandene Dateien auf dem Ziel unberührt bleiben. Ein häufiger Fall ist das Kopieren eines Backups von einem lokalen Repository auf ein Remote-Repository, um zu vermeiden, dass mögliche Beschädigungen alter Snapshots weitergegeben werden. Um ein solches Verhalten zu implementieren, können wir die Option --immutable verwenden: Dies führt dazu, dass ein Kopiervorgang fehlschlägt, wenn er die Änderung vorhandener Dateien auf dem Ziel impliziert (beachten Sie jedoch, dass dies zum Zeitpunkt des Schreibens beim Kopieren einzelner Dateien nicht funktioniert! – siehe diesen offenen Fehler im Rclone GitHub-Repository).

Verschieben und Umbenennen von Dateien und Verzeichnissen

Um Dateien zu verschieben, verwenden wir den Befehl move. Angenommen, wir möchten file0.txt vom Remote-Host auf unseren localhost verschieben. Wir würden laufen:

rclone move gdrive:/file0.txt .

Da es sich um eine potenziell destruktive Operation handelt, möchten wir den Befehl möglicherweise zuerst mit der Option --dry-run starten, die den Vorgang nur simuliert.

Wenn wir eine Datei umbenennen möchten, verwenden wir den Befehl moveto. Angenommen, wir möchten file0.txt umbenennen, um auf der Fernbedienung zu file00.txt. Wir würden laufen:

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

Derselbe Befehl kann verwendet werden, wenn wir eine Datei hochladen, aber unter einem anderen Namen speichern möchten:

rclone moveto file0.txt gdrive:/file00.txt

Synchronisieren von Verzeichnissen mit dem Befehl sync

Ein weiterer Befehl, den wir verwenden können, um Daten von und auf einen Remote-Speicher zu kopieren, ist sync. Der Hauptunterschied zwischen Synchronisieren und Kopieren besteht darin, dass erstere eine Spiegelkopie der Quelle zum Ziel erstellt. Mit anderen Worten, Dateien, die auf der Quelle, aber nicht auf dem Ziel vorhanden sind, werden kopiert und geänderte Dateien werden aktualisiert. Darüber hinaus werden Dateien entfernt, die nicht in der Quelle vorhanden sind, aber auf dem Ziel vorhanden sind.

Angenommen, wir möchten den Inhalt des lokalen mydir-Verzeichnisses mit demselben Verzeichnis auf dem Remote-Verzeichnis synchronisieren (es wird erstellt, wenn es nicht existiert); Wir würden laufen:

rclone sync mydir gdrive:/mydir

Sie können leicht verstehen, warum dieser Befehl mit Vorsicht verwendet werden muss. Es ist möglich, die Option --imutable auch bei Verwendung des Befehls sync zu verwenden; Dies führt dazu, dass der Befehl das Aktualisieren geänderter Dateien ablehnt, während er immer noch Dateien auf dem Ziel löschen kann, das auf der Quelle nicht vorhanden ist.

Löschen von Dateien und Verzeichnissen

Um Dateien und Verzeichnisse zu entfernen, können wir den Befehl delete verwenden. Angenommen, wir möchten die file0.txt Datei auf der Fernbedienung entfernen, würden wir Folgendes ausführen:

rclone delete gdrive:/file0.txt

Wenn wir den Befehl delete für ein Verzeichnis verwenden, wird nur der Verzeichnisinhalt entfernt, während das Verzeichnis selbst an Ort und Stelle bleibt. Wenn das Verzeichnis Unterverzeichnisse enthält, bleiben diese ebenfalls unberührt, es sei denn, wir verwenden die Option --rmdirs (das Stammverzeichnis bleibt weiterhin erhalten).

Um alle bis auf bestimmte Dateien in einem Verzeichnis zu entfernen, können wir ein Muster als Argument der Option --exclude angeben. Um alle Dateien im Verzeichnis "mydir" zu löschen, mit Ausnahme derjenigen mit der Erweiterung ".txt", führen wir beispielsweise Folgendes aus:

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

Dateien können auch nach ihrer Größe und anderen Parametern gefiltert werden. Nur als Beispiel, um nur Dateien >= 100 MiB zu löschen, würden wir Folgendes ausführen:

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

Um sicherzustellen, dass wir nur einzelne Dateien entfernen, können wir den Befehl deletefile verwenden. Um schließlich ein Verzeichnis zusammen mit seinem Inhalt zu entfernen, können wir den Befehl purge verwenden:

rclone purge gdrive:/mydir

Standardmäßig werden gelöschte Dateien und Verzeichnisse in den Google Drive-Papierkorb verschoben: Um eine Datei zu löschen, die den Papierkorb überspringt, können wir jedoch die Option --drive-use-trash=false verwenden. Um gelöschte Dateien aufzulisten, verwenden wir den Befehl ls mit der Option --drive-trashed-only. Um den Papierkorb zu leeren, verwenden wir schließlich den Befehl cleanup:

rclone cleanup gdrive:/

Mounten des Remote-Speichers als Dateisystem

Rclone ist in der Lage, einen entfernten Speicher als Netzwerklaufwerk zu mounten, indem es fuse (Dateisystem im Userspace) verwendet. In unserem Fall würden wir zum Mounten der "gdrive"-Fernbedienung im Verzeichnis ~/Public Folgendes ausführen:

rclone mount gdrive:/ ~/Public

Wenn der Befehl im Vordergrund gestartet wird, blockiert er das Terminal, solange die Fernbedienung gemountet ist. Um das Dateisystem auszuhängen, können wir einfach STRG-c drücken oder explizit ein SIGINT- oder SIGTERM-Signal an den Prozess senden.

Abschließende Gedanken

In diesem Tutorial haben wir gesehen, wie man Rclone auf einigen der am häufigsten verwendeten Linux-Distributionen installiert und wie man es verwendet, um grundlegende Operationen auf einem Remote-Speicher durchzuführen. Dabei haben wir gelernt, wie man Google Drive-API-Anmeldeinformationen erhält und wie man eine Google Drive-Remote-Konfiguration für Rclone erstellt. Es gibt viel mehr, was mit Rclone getan werden kann, als wir in diesem Artikel besprochen haben. Um mehr über alle verfügbaren Befehle und ihre Optionen zu erfahren, werfen Sie bitte einen Blick auf die offizielle Website des Projekts oder führen Sie jeden Befehl mit der Option -h aus.

Verwandte Artikel: