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 erfahren Sie, wie Sie Rclone auf den am häufigsten verwendeten Linux-Distributionen installieren und grundlegende Vorgänge wie das Kopieren, Synchronisieren, Verschieben und Löschen von Daten ausführen. Dabei erfahren Sie auch, wie Sie Anmeldeinformationen für die Google Drive-API erhalten und wie Sie eine Google Drive-Remote 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-Remote
  • So verwenden Sie Rclone zum Verwalten von Daten im Cloud-Speicher

Installation

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

$ sudo dnf install rclone

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

Auf 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

API-Anmeldeinformationen für Google Drive erhalten

Für dieses Tutorial verwenden wir Google Drive als Cloud-Speicher-Testgelände für Rclone. 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 sicherzustellen, möchten wir möglicherweise 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 wählen wir jedoch das Projekt, 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 auf der Google Drive-API-Seite sind, aktivieren wir die API, indem wir auf die Schaltfläche „Aktivieren“ klicken; Wir werden zur API-Service-Detailseite weitergeleitet. An dieser Stelle klicken wir im linken vertikalen Menü auf den Punkt „Anmeldeinformationen“:

Wir müssen nun einen Einwilligungsbildschirm für unser Projekt konfigurieren, dazu 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 zu unserer App bereitstellen. Wir müssen mindestens den „App-Namen“, eine Benutzer-Support-E-Mail und Kontaktinformationen des Entwicklers eingeben. Wenn wir fertig sind, klicken wir auf „Speichern und fortfahren“:

Als Nächstes müssen wir auswählen, welche Bereiche wir unserer Anwendung zuweisen möchten. 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“. Um sicherzustellen, dass Rclone alle Arten von Vorgängen ausführen kann, wählen wir dann ../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 unser eigenes Konto als Testbenutzer 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 noch einmal 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 auf der Seite mit den Anmeldeinformationen sind, 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 merken (wir können sie später ohnehin problemlos über die Seite „Anmeldeinformationen“ 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 Überprüfung an Google senden, wir sollten die „App“ jedoch trotzdem verwenden können. Da wir nun über unsere eigenen Google Drive-API-Anmeldeinformationen verfügen, können wir sehen, wie man eine Rclone-Remote 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 passenden Cloud-Speicher aus einer Liste auswählen. Die genaue Position von Google Drive in der Liste kann variieren. In neueren Versionen von 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 mit Anmeldeinformationen für ein Dienstkonto 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 die Bearbeitung der erweiterten Konfiguration auch ü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 überprüft 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 gewähren möchten. Zur Bestätigung klicken wir auf „Weiter“:

Zurück im Terminal können wir wählen, ob wir ein Shared Drive 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 aufzubewahren, beantworten wir abschließend die letzte Aufforderung mit Ja:

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 verlassen, 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 das Kopieren, Synchronisieren, Verschieben und Löschen von Daten ausgeführt werden.

Auflisten von Dateien und Verzeichnissen auf der Fernbedienung

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

$ rclone ls gdrive:/

Der Befehl gibt die folgende Ausgabe zurück:

37 file1.txt
 5 file0.txt

Wie Sie sehen, werden auf Google Drive nur zwei Dateien gehostet: file1.txt und file0.txt: Ihre Größe wird am Anfang der Zeile in Bytes angegeben . Um weitere Informationen zu jeder 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, sodass sie auch in Unterverzeichnissen enthaltene Dateien auflisten, aber Verzeichnisse nicht in ihre Ausgabe einbeziehen. 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 funktioniert 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 die Namen von Dateien und Verzeichnissen zurück, einen 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 zu einem 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, müssen jedoch bedenken, dass Rclone den Inhalt eines Verzeichnisses kopiert, nicht das Verzeichnis selbst. Darüber hinaus wird das Kopieren leerer Unterverzeichnisse übersprungen, es sei denn, wir verwenden die Option --create-empty-src-dirs.

Beim Kopieren werden Dateien erstellt, die auf der Quelle vorhanden sind, aber auf dem Ziel nicht vorhanden sind, und vorhandene Dateien werden aktualisiert. Manchmal möchten wir dieses Verhalten ändern, sodass vorhandene Dateien am Ziel unberührt bleiben. Ein häufiger Fall ist das Kopieren eines Backups von einem lokalen Repository auf ein Remote-Repository, um die Ausbreitung möglicher Beschädigungen alter Snapshots zu vermeiden. 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 Kopiervorgangs der Fall ist). Schreiben,funktioniert nicht beim Kopieren einzelner Dateien – siehe diesen offenen Fehler im Rclone-GitHub-Repository).

Dateien und Verzeichnisse verschieben und umbenennen

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

$ rclone move gdrive:/file0.txt .

Da es sich um einen möglicherweise destruktiven Vorgang handelt, möchten wir den Befehl möglicherweise zunächst mit der Option --dry-run starten, die den Vorgang lediglich simuliert.

Wenn wir eine Datei umbenennen möchten, verwenden wir den Befehl moveto. Angenommen, wir möchten file0.txt auf der Fernbedienung in file00.txt umbenennen. wir würden Folgendes ausführen:

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

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

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

Verzeichnisse mit dem sync-Befehl synchronisieren

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

Angenommen, wir möchten den Inhalt des lokalen Verzeichnisses mydir mit demselben Verzeichnis auf der Fernbedienung synchronisieren (es wird erstellt, wenn es nicht existiert). wir würden Folgendes ausführen:

$ 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 die Aktualisierung geänderter Dateien ablehnt, während er dennoch in der Lage ist, Dateien am Ziel zu löschen, die in der Quelle nicht vorhanden sind.

Dateien und Verzeichnisse löschen

Um Dateien und Verzeichnisse zu entfernen, können wir den Befehl delete verwenden. Angenommen, wir möchten die Datei file0.txt 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 seinem Platz 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 „mydir“-Verzeichnis zu löschen, außer denen mit der Erweiterung „.txt“, würden wir beispielsweise Folgendes ausführen:

$ 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 samt 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 und den Papierkorb zu überspringen, 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. Zum Schluss leeren wir den Papierkorb mit dem Befehl cleanup:

$ rclone cleanup gdrive:/

Mounten des Remote-Speichers als Dateisystem

Rclone kann mithilfe von Fuse (Dateisystem im Userspace) einen Remote-Speicher als Netzwerkfestplatte bereitstellen. In unserem Fall würden wir zum Mounten der Fernbedienung „gdrive“ 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 damit grundlegende Vorgänge auf einem Remote-Speicher durchführt. Dabei haben wir gelernt, wie man Google Drive-API-Anmeldeinformationen erhält und wie man eine Google Drive-Remote-Konfiguration für Rclone erstellt. Mit Rclone kann noch viel mehr getan werden, 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: