CURL mehrere Dateien vom ftp-Server herunterladen
Hallo Experten,
ich suche schon lange nach einer Lösung um mit "curl" mehrere Dateien von einem ftp-Server downloaden.
Befor der Vorschlag mit "wget" kommt, es soll wirklich "curl" sein.
Mein Problem ist, dass die Dateienamen kein richtiges System haben, also die haben eine kryptische Bezeichnung, so dass ich mit Platzhaltern nicht arbeiten kann.
Beispiel: 0c442e00-f503-43c8-96c0-36bb7bb7f08e.ics, 0fc54002-7950-4513-9e33-764eefc7cdaf.ics, 1a266732-0000-47ff-a68a-99eb6017e4c6.ics usw.
Mit "curl -o file.txt ftp://user:pw@ftp-server/ordner/" bekomme ich höchstens eine Textdatei/Liste mit Ordnerinhalt.
Kann ich die Datei vielleich dafür irgendwie verwenden, um die Ordnerinhalt zu kopieren oder gibt es eine andere Möglichkeit, wie bei "wget" die Dateien rekursiv herunterzuladen?
Für jeden Tipp wäre ich sehr dankbar!
Gruß
highpriest
ich suche schon lange nach einer Lösung um mit "curl" mehrere Dateien von einem ftp-Server downloaden.
Befor der Vorschlag mit "wget" kommt, es soll wirklich "curl" sein.
Mein Problem ist, dass die Dateienamen kein richtiges System haben, also die haben eine kryptische Bezeichnung, so dass ich mit Platzhaltern nicht arbeiten kann.
Beispiel: 0c442e00-f503-43c8-96c0-36bb7bb7f08e.ics, 0fc54002-7950-4513-9e33-764eefc7cdaf.ics, 1a266732-0000-47ff-a68a-99eb6017e4c6.ics usw.
Mit "curl -o file.txt ftp://user:pw@ftp-server/ordner/" bekomme ich höchstens eine Textdatei/Liste mit Ordnerinhalt.
Kann ich die Datei vielleich dafür irgendwie verwenden, um die Ordnerinhalt zu kopieren oder gibt es eine andere Möglichkeit, wie bei "wget" die Dateien rekursiv herunterzuladen?
Für jeden Tipp wäre ich sehr dankbar!
Gruß
highpriest
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 317443
Url: https://administrator.de/forum/curl-mehrere-dateien-vom-ftp-server-herunterladen-317443.html
Ausgedruckt am: 23.12.2024 um 05:12 Uhr
10 Kommentare
Neuester Kommentar
Hey highpriest,
diese Schleife nutze ich produktiv.
Denke als Denkansatz hilft es.
Es ist eine For-Schleife für mehrere Server und ein Download mehrerer Dateien per curl.
Grüße Marc
diese Schleife nutze ich produktiv.
Denke als Denkansatz hilft es.
Es ist eine For-Schleife für mehrere Server und ein Download mehrerer Dateien per curl.
# Initialisieren der Arrays
array_country=([1]=DE....[...])
array_ip=([1]=192.168........[...])
# Backup der Anlagen in den Arrays
for i in {1..9}
do
curl -s -S -u %USER%:%PASSWORD% -o /mnt/pas01/zip/backup/Telefonanlagen/${array_country[$i]}/voice/vm/mbox#1/greeting#2.wav ftp://${array_ip[$i]}//ftl0/voice/vm/mbox[1-61]/greeting[1-3].wav --create-dirs --ftp-method nocwd 2>/dev/null
curl -s -S -u %USER%:%PASSWORD% -o /mnt/pas01/zip/backup/Telefonanlagen/${array_country[$i]}/voice/vm/greet/used.greeting_#1.wav ftp://${array_ip[$i]}//ftl0/voice/vm/greet/used.greeting_[1-3].wav --create-dirs --ftp-method nocwd 2>/dev/null
curl -s -S -u %USER%:%PASSWORD% -o /mnt/pas01/zip/backup/Telefonanlagen/${array_country[$i]}/voice/vm/music/used.moh.wav ftp://${array_ip[$i]}//ftl0/voice/music/used.moh.wav --create-dirs --ftp-method nocwd 2>/dev/null
done
Grüße Marc
Natürlich kann man das auch per Skript machen, aber effektiv und schnell ist was anderes da dann für jedes einzelne File und Ordner die FTP-Verbindung neu aufgebaut werden muss. Super langsam also.
Folgendes Skript lädt ein Verzeichnis rekursiv herunter:
R.
Folgendes Skript lädt ein Verzeichnis rekursiv herunter:
#!/bin/bash
USERNAME="USERXYZ"
PASSWORD="GEHEIM"
# use backslash at end
REMOTEDIR="/remote/dir/"
LOCALDIR="./download"
FTPHOST="ftp.host.de"
# -------
URL="ftp://${USERNAME}:${PASSWORD}@${FTPHOST}"
GetDirs(){
subdir="$1"
dirs=$(curl -s "${URL}${subdir}" | awk '{if ($1 ~ /^d/ && $9 !~ /^..?$/){print $9}}')
[[ $dirs ]] && echo "$dirs"
}
GetFiles(){
subdir="$1"
files=$(curl -s "${URL}${subdir}" | awk '{if ($1 ~ /^-/){print $9}}')
[[ $files ]] && echo "$files"
}
DownloadRecursive(){
mkdir "$LOCALDIR$1" 2>/dev/null
for f in $(GetFiles "$1") ;do
echo -e "Downloading file: $1$f\n"
curl -o "$LOCALDIR$1$f" "$URL$1$f"
done
for d in $(GetDirs "$1") ;do
DownloadRecursive "$1$d/"
done
}
DownloadRecursive "$REMOTEDIR"
Nö, hier lüppt das mit sämtlichen Ordnern und Unterordnern.
Falsch LOCALDIR ist der Rootpfad in den die Dateien heruntergeladen werden! Dort wird die gleiche Ordnerstruktur wie auf dem zu herunterladenden Verzeichnis auf dem FTP-Server erstellt, Unterordner also angelegt falls sie noch nicht existieren.
ACHTUNG Das Skript ist nur für Unix FTP-Server gedacht und funktioniert nur dort weil es die Ordner und Dateien anhand der Auflistung des Server-OS unterscheidet (drwx r x r etc.)
Aber wie gesagt das Verfahren ist super ineffizient, da sich für jede Datei, jede Verzeichnisauflistung curl neu mit dem FTP-Verbinden muss. Das ist also vollkommener Quatsch das so zu machen!! Das macht heutzutage kein Mensch so, wenn es unter Linux ja schon die passenden Tools dafür gibt.
ACHTUNG Das Skript ist nur für Unix FTP-Server gedacht und funktioniert nur dort weil es die Ordner und Dateien anhand der Auflistung des Server-OS unterscheidet (drwx r x r etc.)
Aber wie gesagt das Verfahren ist super ineffizient, da sich für jede Datei, jede Verzeichnisauflistung curl neu mit dem FTP-Verbinden muss. Das ist also vollkommener Quatsch das so zu machen!! Das macht heutzutage kein Mensch so, wenn es unter Linux ja schon die passenden Tools dafür gibt.