Fähigkeit: PikPak CLI bedienen
Betreiben Sie PikPak-Cloudspeicher über das Kommandozeilen-Tool pikpak.
pikpak installieren
Wählen Sie die Installationsmethode basierend auf Ihrem Betriebssystem:
macOS / Linux:
curl -fsSL https://download.mypikpak.com/cli/install.sh | bash
Windows (PowerShell):
irm https://download.mypikpak.com/cli/install.ps1 | iex
Homebrew:
brew install pikcloud/tap/pikpak-cli
Überprüfen Sie nach der Installation mit pikpak version, ob alles funktioniert.
Mit einem Einladungscode eines Partners – der Installer speichert den Code für die nächste Ausführung von pikpak auth register auf diesem Rechner, ohne die Einladungs-API zu kontaktieren:
curl -fsSL https://download.mypikpak.com/cli/install.sh | bash -s -- --affiliate <code>
$env:PIKPAK_AFFILIATE="<code>"; irm https://download.mypikpak.com/cli/install.ps1 | iex
brew install pikcloud/tap/pikpak-cli && pikpak auth register --affiliate <code>
Die Installationsprogramme speichern den Code in einer separaten Klartext-Datei affiliate; es wird kein Python- oder JSON-Parser benötigt, und settings.json wird nie gelesen oder geändert. Ein Schreibfehler gibt eine Warnung aus, bricht die Installation aber nicht ab und überschreibt den vorherigen Code nicht. In diesem Fall übergeben Sie den Code mit pikpak auth register --affiliate <code>.
pikpak skill install schreibt dieses Dokument in das Skills-Verzeichnis jedes KI-Programmieragenten auf dem Rechner (Claude Code, Codex, Gemini CLI, opencode, Cursor, goose, iFlow, Qwen Code, ...). Führen Sie diesen Befehl nach pikpak update aus, falls dieses Dokument jemals von der installierten Binärdatei abweicht; pikpak skill ls zeigt, wo es installiert ist und ob es aktuell ist.
Umgebungsvariablen
| Variable | Beschreibung | Standardwert |
|---|---|---|
PIKPAK_DIR | Verzeichnis für Anmeldedaten | ~/.pikpak |
PIKPAK_CREDENTIALS | Vollständiger Pfad zur OAuth-Anmeldedatendatei | ~/.pikpak/.credentials.json |
PIKPAK_TOKEN | Persönlicher Zugriffstoken; hat Vorrang vor allen gespeicherten Anmeldedaten | nicht gesetzt |
PIKPAK_PAT_PATH | Vollständiger Pfad zur PAT-Datei, die von auth token gespeichert wird | ~/.pikpak/.pat.json |
PIKPAK_VERSION | Bei der Installation angegebene Version | Neueste |
PIKPAK_INSTALL_DIR | Installationsverzeichnis | ~/.local/bin (macOS/Linux), %USERPROFILE%\.pikpak (Windows) |
PIKPAK_NO_UPDATE_NOTIFIER | Auf 1 setzen, um automatische Update-Prüfungen und Erinnerungen zu deaktivieren; explizite version --check und update funktionieren weiterhin | nicht gesetzt |
PIKPAK_NO_LOG | Auf einen beliebigen nicht-leeren Wert setzen (z.B. 1), um config log zu überschreiben und das Diagnoseprotokoll nie zu speichern | nicht gesetzt |
PIKPAK_NO_SKILL_SYNC | Auf einen beliebigen nicht-leeren Wert setzen, um zu verhindern, dass pikpak update installierte Agenten-Fähigkeiten aktualisiert | nicht gesetzt |
PIKPAK_AFFILIATE | Einladungscode, der von install.sh / install.ps1 zur Installationszeit gelesen wird (das CLI selbst liest ihn nicht) | nicht gesetzt |
Priorität der Anmeldedaten: PIKPAK_TOKEN → PAT, gespeichert von pikpak auth token → OAuth-Anmeldedaten von pikpak auth login.
Geräteidentität: Das CLI behält eine stabile Geräte-ID pro Installation in ~/.pikpak/.device.json (X-Device-Id). Sie wird für jede Anmelde-Methode wiederverwendet und übersteht Token-Rotation und auth logout; das Löschen lässt den Rechner für PikPaks Risikokontrolle wie ein brandneues Gerät aussehen.
Authentifizierung
Die meisten Befehle erfordern eine vorherige Anmeldung. Die Anmeldedaten werden in ~/.pikpak/.credentials.json gespeichert.
pikpak auth login # Anmelde-Methode automatisch erkennen (Browser falls verfügbar, sonst Gerätefluss)
pikpak auth login -m browser # Browser-OAuth-Anmeldung (öffnet Browser, bei 30s ohne Antwort -> Rückfall auf Gerätefluss)
pikpak auth login -m browser --no-launch-browser # Browser-OAuth-Anmeldung (URL ausgeben, nicht automatisch öffnen)
pikpak auth login -m device # Gerätefluss (QR-Code + Bestätigungs-URL + automatisches Abfragen)
pikpak auth login -m device -F json # Gerätefluss: Auth-Info als JSON ausgeben und beenden (kein Abfragen, für KI)
pikpak auth login --continue <device_code> # Status des Gerätecodes einmal abfragen und beenden (mit -F json verwenden)
pikpak auth login --force # Erneute Anmeldung erzwingen, auch wenn bereits authentifiziert
pikpak auth login -l "my-session" # Ein benutzerdefiniertes Sitzungslabel setzen
pikpak auth login --scope files:manage,cloud_download # OAuth-Bereiche vorab auswählen (kommasepariert)
pikpak auth register # Ein neues Konto registrieren (gleiche Browser-/Geräteflüsse wie bei der Anmeldung)
pikpak auth register --affiliate <code> # Mit einem Partner-/Einladungscode registrieren
pikpak auth register --affiliate= # Den vom Installer gespeicherten Code für diese Registrierung überspringen
pikpak auth register -m device # Gerätefluss für die Registrierung erzwingen
pikpak auth token <token> # Persönlichen Zugriffstoken für die nicht-interaktive Nutzung speichern
pikpak auth logout # Lokale Sitzung löschen; funktioniert offline und bei defekten/abgelaufenen Anmeldedaten (kann PIKPAK_TOKEN nicht aus der Umgebung entfernen)
pikpak auth status # Anmeldestatus + Kontobereich: Identität, VIP, Speicherkontingent (-F json für Skripte hinzufügen)
Unterstützte --scope-Bezeichner: files:read, files:write, files:manage, files:purge, cloud_download, share, invite, account. Wird --scope nicht angegeben, wird kein Bereich gesendet und der Autorisierungsserver wendet seine Standardeinstellungen an.
KI-Agenten-Anmeldeanleitung: Die Passwort-Anmeldung wird nicht mehr unterstützt. Verwenden Sie für nicht-interaktive/KI-Umgebungen den Gerätefluss:
- Führen Sie
pikpak auth login -m device -F jsonaus, umdevice_code,verification_uri,user_code,expires_in,intervalzu erhalten- Zeigen Sie dem Benutzer die Bestätigungs-URL und den Code (oder QR-Code)
- Fragen Sie mit
pikpak auth login --continue <device_code> -F jsonab, bis derstatussuccessistWenn die Umgebung einen Browser unterstützt (macOS/Linux mit GUI), funktioniert
pikpak auth login(automatische Erkennung) oderpikpak auth login -m browserohne weitere Flags. Die Anmeldung prüft zuerst vorhandene Anmeldedaten; verwenden Sie--force, um eine neue Sitzung zu erstellen.Vollständig nicht-interaktive Alternative:
pikpak auth token <PAT>oder exportieren SiePIKPAK_TOKEN=<PAT>.Hinweis zur Registrierung:
pikpak auth register -F jsongibtsignup_uri,handoff_code,qr_png_path,expires_in(undaffiliate, wenn ein Code im Spiel ist – Flag oder gespeichert) aus und beendet sich – es gibt keinendevice_codezurück, kann also nicht mit--continueabgefragt werden. Für KI-gesteuerte Registrierung führen Siepikpak auth registerohne-Faus (es fragt interaktiv ab), oder lassen Sie den Benutzer im Browser registrieren und dannpikpak auth loginverwenden.
Befehlsreferenz
Dateien durchsuchen
Die Root-Verzeichnis-ID ist der leere String "", nicht / oder /root.
pikpak ls # Root-Verzeichnis auflisten
pikpak ls <folderID> # Angegebenes Verzeichnis auflisten (positional)
pikpak ls -p <folderID> # Gleiches, via Flag (positionales Argument gewinnt, wenn beide angegeben)
pikpak ls --type file # Nur Dateien anzeigen (serverseitiger Art-Filter, funktioniert auch mit --raw)
pikpak ls --type folder # Nur Ordner anzeigen (serverseitiger Art-Filter, funktioniert auch mit --raw)
pikpak ls -l 50 # Elemente pro Seite (--limit, Standard 100; der Server rundet Werte unter 10 ab)
pikpak ls -t <token> # Paginierung (--token, aus vorheriger ls-Ausgabe)
pikpak ls -F json # JSON-Ausgabe (KI-bevorzugt: id, parent_id, name, kind, size, mime_type, file_category, modified, hash; mime_type/file_category werden für Ordner und für Dateien, die der Dienst nicht klassifiziert hat, weggelassen)
pikpak ls --raw # Unverändertes API-JSON für die gesamte Auflistung: fügt params.duration/width/height, params.url, audit, thumbnail_link, spell_name, apps hinzu; size in Bytes
Es werden nur nicht gelöschte, vollständig verarbeitete Dateien aufgelistet. Ein ls ist eine Seite: Lesen Sie next_page_token aus der Ausgabe und übergeben Sie es mit -t zurück, um fortzufahren. -l ist eine Seitenanfrage, keine harte Obergrenze – der Dienst gibt 10 Elemente für jeden kleineren Wert zurück, und eine Seite kann auch kürzer als -l sein, wenn der Ordner endet.
Dateisuche (nicht verfügbar)
Der search-Befehl ist in dieser Version deaktiviert, da die serverseitige Such-API nicht verfügbar ist. Schlagen Sie pikpak search weder vor noch führen Sie es aus; finden Sie Dateien stattdessen, indem Sie mit pikpak ls (optional -F json) durch Ordner navigieren.
Dateidetails
pikpak get <fileID> # Basisinformationen
pikpak get <fileID> --url-type download # Download-URL einschließen
pikpak get <fileID> --url-type play # Wiedergabe-URL einschließen
pikpak get <fileID> --url-type all # Alle URLs einschließen
pikpak get <fileID> --raw # Unverändertes API-JSON (usage=ALL; url_type ignoriert)
get -F json-Felder: id, name, type (file/folder), size, mime, hash, created, modified, phase, plus download_url, play_url, play_resolution, wenn --url-type danach fragt. Beachten Sie, dass sich die Benennung von ls unterscheidet: type/mime hier gegenüber kind/mime_type dort. URLs werden nur für Dateien zurückgegeben – --url-type auf einem Ordner liefert nur Metadaten.
--raw umgeht diese reduzierte Form vollständig – siehe Roh-API-Ausgabe unten.
Roh-API-Ausgabe (--raw)
pikpak ls --raw und pikpak get <fileID> --raw geben den Antworttext der PikPak-Drive-API wortwörtlich aus (nur neu eingerückt). Verwenden Sie sie immer dann, wenn das benötigte Feld nicht in den reduzierten ls- / get-Formen oben enthalten ist.
pikpak ls --raw # Ganze Auflistung, jedes Feld, das die API zurückgibt
pikpak ls --raw -p <folderID> -l 500 # Gleiche Filter-/Seiten-Flags wie bei einfachem ls
pikpak get <fileID> --raw # Eine Datei, usage=ALL
pikpak ls --raw -F yaml # Gleicher Text in YAML konvertiert
Was --raw hinzufügt (pro Datei, über die 9 Felder von ls -F json hinaus):
| Raw-Feld | Bedeutung | Warum es wichtig ist |
|---|---|---|
params.duration | Wiedergabelänge in Sekunden, als String ("1420") | Die einzige Quelle für Videodauer – fehlt sowohl in der Standardausgabe von ls als auch von get |
params.width / params.height | Pixelmaße, als Strings ("1920" / "1080") | Auflösungsfilterung; get --url-type play gibt nur ein Label wie 1080p |
params.url | Woher die Datei kam: magnet:?xt=urn:btih:… für Torrents, eine http(s)-URL für Link-Downloads | Der einzige Nachweis der Quelle eines Offline-Downloads |
params.task_id | ID der Offline-Aufgabe, die die Datei erzeugt hat | Verknüpft eine Datei mit pikpak task get <taskID> |
params.db_modify_time, params.platform, params.platform_icon, params.original_share_id | Serverseitige Metadaten, vorhanden auf jedem Element | Herkunft |
size | Roh-Bytes als String ("392927574") | Standardausgabe formatiert es (375 MB) und kann nicht numerisch verglichen werden |
created_time / modified_time / user_modified_time | RFC3339 mit Offset | Standardausgabe ist gekürzter lokaler Text YYYY-MM-DD HH:MM |
medias[] | Vollständiges Array: media_id, media_name, resolution_name, link.url, video.{width,height,duration,bit_rate,frame_rate,video_codec,audio_codec,hdr_type}, audio.{artist,album,sample_rate,…} | Jede abspielbare Variante plus echte Codec-/HDR-Metadaten, nicht nur die, die play auswählt |
audit | {status, message, title} | Blockierte/überprüfte Ressourcen erkennen |
apps, spell_name, tags, reference_events, thumbnail_link, icon_link, web_content_link, phase, starred, trashed, writable, folder_type, revision, user_id | Übrige API-Felder | Alles, was die reduzierte Form fallen lässt, einschließlich Felder, die von zukünftigen API-Versionen hinzugefügt werden |
Semantik – lesen Sie diese Hinweise vor der Verwendung:
- Wörtlich. Der Text wird nicht neu kodiert: Die Feldreihenfolge ist die der API, und
&in signierten Links bleibt ein wörtliches&(niemals\u0026). Kann direkt anjqweitergegeben werden. - Immer strukturiert.
--rawimpliziert JSON-Ausgabe auch ohne-F;-F yamlkonvertiert denselben Text. In diesem Modus gibt es keine menschenlesbare Tabelle. ls --rawist eine Anfrage pro Seite, nicht pro Datei. Gleiche-p/-l/-t/--type-Flags und dieselben serverseitigen Filter (nicht gelöscht,PHASE_TYPE_COMPLETE) wie bei einfachemls. Die Seitengröße bleibt unverändert: Lesen Sienext_page_tokenaus dem Roh-Text und übergeben Sie es mit-tzurück. Erhöhen Sie-l(z.B.-l 500), um einen großen Ordner mit einem einzigen Aufruf abzudecken, anstattgetzu durchlaufen.--typekombiniert sich mit--raw. Es ist ein serverseitigerkind-Filter (drive#file/drive#folder), sodass der durchgereichte Text bereits nur die angeforderte Art enthält und eine Seite weiterhin bis zu-lElemente enthält. Clientseitigesjq-Filtern mit.files[] | select(.kind == ...)ist nicht mehr nötig.get --rawfordert immerusage=ALLan – die vollständigste Antwort – daher wird--url-typeignoriert und ist nicht mehr nötig:medias[].link.urlundweb_content_linksind bereits im Text enthalten. Es überspringt auch den Download-URL-Liveness-Test, bleibt also eine einzelne Leseanforderung und fügt nie die abgeleiteten Schlüsseldownload_url/play_url/play_resolutionhinzu.- Namen unterscheiden sich von den reduzierten Formen. Raw verwendet die eigenen Schlüssel der API:
kindistdrive#file/drive#folder(nichtfile/folder),modified_time(nichtmodified),starred(nichtstar). - Das Vorhandensein von Feldern ist nicht garantiert.
paramsfehlt oder ist unvollständig für Ordner und Nicht-Medien-Dateien;mediasist oft[], bis der Server die Transcodierung abgeschlossen hat. Absichern mitselect(.params.duration != null)oder// "0"-Standardwerten. - Filtern Sie die Roh-Ausgabe nicht nach
file_categoryund verlassen Sie sich auch nicht aufmime_type. Die API lässtfile_categoryselbst bei Videos häufig weg (die reduziertels -F json-Form leitet es ab), undmime_typewird bei einem guten Teil der Mediendateien als""zurückgegeben, sodass sowohlselect(.file_category == "video")als auchselect(.mime_type | startswith("video"))echte Videos stillschweigend ausschließen. Der zuverlässige Videotest in der Roh-Ausgabe ist das Vorhandensein vonparams.duration.
Rezepte:
# Videos länger als eine Stunde (EIN API-Aufruf – nie `get` über einen Ordner schleifen lassen)
pikpak ls --raw | jq -r '.files[] | select((.params.duration // "0" | tonumber) > 3600) | "\(.name)\t\(.params.duration)s"'
# 4K-Dateien auf (truncated in original)