Dropbox hat an sich ja ein praktisches Programm, welches einen Ordner auf der Festplatte ständig mit dem Dropbox-Server synchronisiert.
Allerdings benötige ich selbst kein ständig synchronisierendes Programm und finde den Dropbox-Client inzwischen etwas zu überladen. Noch dazu nervt, dass es dann mal wieder nicht funktioniert, wenn man das Programm nicht upgedatet hat oder das Programm sich nicht mehr updaten lässt, wenn Dropbox meint, dass das Betriebssystem zu alt wäre.

Ich bin auf einige Bibliotheken gestoßen, die auf der Dropbox-API aufbauen. Aber will man einfach nur mal eine Datei auf den Dropbox-Server hochladen, um sie von wo anders wieder herunterladen oder jemandem einen Download-Link senden zu können, geht das auch ganz einfach via curl.

Zuerst müssen wir auf https://www.dropbox.com/developers/apps eine "App" erstellen, um einen AUTH_TOKEN zu erhalten.
Den Auth Token geben wir später dem curl-Befehl zwecks Identifizierung mit.
Ich habe die "App" so eingerichtet, dass sie nur auf einen bestimmten Ordner innerhalb der Dropbox Zugriff hat. Das reicht mir zum Hochladen und Teilen aus.

Zu sehen ist der generierte Token später, wenn man in der offiziellen API-Doku https://www.dropbox.com/developers/documentation/http/documentation#files-upload seine "App" auswählt bei einem Beispiel auf "get access token klickt"

Nun noch ein paar Zeilen Bash-Code.

Ein curl-Befehl, welcher eine Datei hochlädt, darauf wird unter anderem der Dateiname zurückgegeben, unter welchem die Datei abgelegt wurde (kann vom Original-Dateinamen abweichen, falls eine Datei dieses Namens bereits vorhanden war).
Ein weiterer curl-Befehl, um die Datei freizugeben und den Freigabe-Link zurückgemeldet zu bekommen.

Die Freigabelinks haben immer die Endung ?dl=0 was dann zu einer Dropbox-Website führt, wo man den Download starten muss. Ich ändere die Links immer auf ?dl=1, was den Download dann sofort auslöst.
Dies ändert mein Skript ebenfalls ab.

Im folgenden Skript ist zweimal das <AUTH_TOKEN> gegen den tatsächlichen eigenen Token auszutauschen:

box.sh
#!/bin/bash

FILE=$1
if [[ ! -f $FILE ]]; then
        echo "Datei $FILE existiert nicht."
        exit 1
        fi
NAME=`basename $FILE`
drop_name=`curl -X POST https://content.dropboxapi.com/2/files/upload --header "Authorization: Bearer <AUTH_TOKEN>" --header "Dropbox-API-Arg: {\"path\": \"/$NAME\",\"mode\": \"add\",\"autorename\": true,\"mute\": false,\"strict_conflict\": false}" --header "Content-Type: application/octet-stream" --data-binary @$FILE | sed -n 's/.*"path_lower": "\([^"]*\)".*/\1/p'`
echo " "
echo "Hochgeladen als $drop_name"
drop_url=`curl -s -X POST https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings --header "Authorization: Bearer <AUTH_TOKEN>" --header "Content-Type: application/json" --data "{\"path\": \"$drop_name\",\"settings\": {\"requested_visibility\": \"public\",\"audience\": \"public\",\"access\": \"viewer\" } }" | sed -n 's/.*"url": "\(.*dl=\)0".*/\1/p'`
echo "URL zum herunterladen: $drop_url""1"

Verwendung:
box.sh /pfad/zu/datei.zip

Antwort:
URL zum herunterladen: https://www.dropbox.com/s/p7x87n8cx7vcbx8c/datei.zip?dl=1

Die paar Zeilen habe ich als Funktion zu meinem .bash_profile hinzugefügt und kann somit jederzeit per Kommandozeile eine Datei in die Dropbox verfrachten.