Wie lade ich mehrere Dateien vom Linux-Server auf FTP hoch?

7

Ich habe zum Beispiel Datenbank-Backups auf meinem Linux-Server und möchte ein Skript schreiben, um es auf Remote-FTP hochzuladen. Ich habe es versucht put Befehl, aber es kann nur eine Datei gleichzeitig übertragen. Dann habe ich den Befehl mput ausprobiert, aber er zeigt mir nur Fragezeichen für Dateien an, die ich übertragen möchte (vielleicht verwende ich ihn falsch? ..)

Ich habe es versucht:

#!/bin/bash
ftp -n <<EOF
open ftp.server.com
user name password
cd backup
mput /backup/*
EOF

Aber es wird nicht funktionieren. Es gibt Namen von Dateien aus, die ich übertragen möchte, mit Fragezeichen am Ende der Namen. Vermisse ich etwas oder gibt es vielleicht einen einfacheren Weg?

Andrius
quelle

Antworten:

8

Schauen Sie sich an ncftp, es kommt mit einem Dienstprogramm ( ncftpput ), die für diesen Zweck geschrieben werden können:

$ ncftpput -R ftp.server.com /remote/path /backup

Das -R flag bedeutet rekursiver Modus. Sie können Ihre Authentifizierungsdetails in einer separaten Datei haben. Siehe die Manpage ( ncftpput(1) ) für Details.

dawud
quelle
Ich wollte auch ncftp vorschlagen. Verwenden Sie es die ganze Zeit (und die Lesezeichen-Funktion ist großartig :)).
a CVn
Aus irgendeinem Grund wurde es falsch installiert oder überhaupt nicht installiert. Es gibt mir einen Fehler -bash: ncftp: command not found. Im Installationsprotokoll heißt es, dass es erfolgreich installiert wurde, aber ich sah auch Warnungen wie diese - "insserv: warning: script 'NcFTPd' fehlende LSB-Tags und überschreibt insserv: Es gibt eine Schleife zwischen service redmine und NcFTPd, wenn insserv: loop gestoppt wurde, die den Dienst NcFTPd betrifft at depth 2 insserv: Schleife mit Service Redmine at depth 1 insserv: Das Stoppen von NcFTPd hängt von Redmine und damit von der Systemeinrichtung "$ all" ab, was nicht wahr sein kann! "
Andrius
2
@Andrius Sind Sie sicher, dass Sie den Client und nicht den Server installiert haben? Die Fehlermeldung deutet definitiv darauf hin, dass Sie den Server installiert haben.
a CVn
Richtig .. wie ich das nicht gesehen habe :)
Andrius
3

Eine andere Alternative könnte sein, zu verwenden CurlFtpFS , ein FUSE-Dateisystemtreiber, der einen FTP-Host als bereitgestelltes Verzeichnis bereitstellt (mit dem Sie mit normalen Tools auf diese Dateien zugreifen können, einschließlich cp ). Ich weiß nicht, wie gut es funktioniert, aber von einem schnellen googeln sieht es sehr vielversprechend aus. CurlFtpFS geht weiter zurück als FUSE, sollte also stabil sein.

Um es zu verwenden, installieren Sie das entsprechende Paket für Ihre Distribution (zum Beispiel verwenden Arch und Debian den Paketnamen curlftpfs ), laden Sie die fuse Modul und sudo curlftpfs ftp.example.com /mnt/ftp/ -o user=username:password,allow_otherErsetzen Sie die entsprechenden Werte für Servername, Einhängepunkt, Benutzername und Kennwort.

Es gibt weitere Details auf der verlinkten Seite, aber das sollte Ihnen den Einstieg erleichtern.

a CVn
quelle
2

Du könntest lftp benutzen

lftp ftp://user:[email protected] -e "mirror -e -R /local/folder /remote/folder ; quit"
TheFoOL
quelle