Kann ich einen ganzen Ordner über FTP hochladen?

29

Ich muss einen vollständigen Ordner über FTP hochladen. Gibt es eine Option zum gleichzeitigen Übertragen eines Ordners und seines gesamten Inhalts?

Jeff Atwood
quelle

Antworten:

24

Wenn Sie einen Standardbefehlszeilen-FTP-Client verwenden, können Sie mit dem MPUTBefehl alle Dateien übertragen, die einem (Shell-Glob-ähnlichen) Muster entsprechen, MPUT *und alle Dateien im aktuellen Verzeichnis senden. Es gibt auch MGETDateien, die mit einem Muster übereinstimmen.

Standardmäßig werden beide MPUTund MGETgefragt, ob die einzelnen Dateien zuvor übertragen werden sollen. Wahrscheinlich möchten Sie die Eingabeaufforderung mit dem Befehl "PROMPT" deaktivieren (kein Argument; es ist ein Umschalter).

Dave Sherohman
quelle
Diese Frage kam ursprünglich von stackoverflow, daher sollte sie meiner Meinung nach die akzeptierte Antwort sein. Obwohl der ursprüngliche Fragesteller verschwunden zu sein scheint, wird er keinen annehmen ...
codetaku
Warnung: Der mit Windows gelieferte FTP-Befehlszeilenclient unterstützt den passiven Modus nicht. Daher kann die Verwendung dieser Technik Ihre Zeit verschwenden. Dies war in meinem Fall der Fall, da ich Dateien hochladen musste und die Windows-Befehlszeile mit den nativ installierten Tools verwendete.
Sean2078
1
Es werden alle einfachen Dateien im aktuellen Verzeichnis übertragen, aber keine vorhandenen Verzeichnisse werden rekursiv übertragen. Es wird sie einfach im
Stillen
22

Sie können ncftpput verwenden. Mach Folgendes:

  1. Installieren Sie ncftp:

    yum install ncftp
    

Yum ist Kleinbuchstaben.

Alternative:

    apt-get install ncftp

2. Führen Sie den folgenden Befehl aus:

    ncftpput -R -v -u "ftp-username" ftp.website.com ftp-upload-path local-path/*
Mohamed BK
quelle
Das Yum sollte in Yum geändert werden, da zwischen Groß- und Kleinschreibung unterschieden wird.
olekeh
1
Hier sind alle CLI-Optionen für ncftpput: ncftp.com/ncftp/doc/ncftpput.html
Pepijn Olivier
8

Verwenden Sie einen FTP-Client wie LeechFTP oder FileZilla oder ähnliches. Viele Leute schwören auf CuteFTP, aber es ist Shareware, die ich zuletzt überprüft habe. Alle unterstützen die Übertragung eines ganzen Ordners einschließlich der Verzeichnisstruktur.

Joshua Nurczyk
quelle
1
+1 für FileZilla: filezilla-project.org/download.php?type=client
William Jackson
5
  1. Lassen Sie den Benutzer / Client den Ordner komprimieren
  2. Laden Sie die Zip-Datei hoch
  3. Entpacken Sie den Ordner Server .
Chase Florell
quelle
Hinweis: Meine Antwort wurde bei StackOverflow gepostet. Aus diesem Grund wird auf eine "Codierungs" -Lösung verwiesen.
Chase Florell
2

Ein einfaches Tutorial für andere Windows-Neulinge wie mich, die hier landen:

Der einfachste Weg, einen gesamten Ordner (mit allen darin enthaltenen Unterordnern und Dateien) hochzuladen, ist:

  1. Laden Sie den NcFTP-Client (kostenlos, aber Sie können spenden) über diesen Link herunter .
  2. Wählen Sie NcFTP Client 3.2.5 für Microsoft Windows aus der Liste.
  3. Es installieren.
  4. Wenn Sie fertig sind, erscheint ein kleines CMD-Fenster mit einem Kirschsymbol. Du brauchst es nicht.
  5. Öffnen Sie einfach ein Standard-CMD-Fenster und geben Sie Folgendes ein:
    ncftpput -u * yourUserNameHere * -p * yourUserPasswordHere * -R * www.yourWebsite.com * /
                     _C: \ yourFolderDirectoryHere \\ * _
    (als eine Zeile).

Beachten Sie, dass:

  • -R ist ein Flag für "rekursiv"; Der Befehl kopiert alle Unterordner rekursiv
  • / (Schrägstrich) ist das Stammverzeichnis Ihrer Website
  • C:\yourFolderDirectoryHere\* wählt alles drinnen aus C:\yourFolderDirectoryHere
DBS
quelle
sieht gut aus, aber der Server hat meine IP gesperrt und mir mitgeteilt, dass ich in kurzen Abständen 800 Verbindungen hergestellt habe. Keine Möglichkeit, die Anzahl der Verbindungen zu reduzieren. Ein weiteres Problem ist, dass ich nicht weiß, wie das Hochladen zu überspringen, wenn Zieldatei bereits vorhanden ist.
16851556
2

Ich werde eine Antwort anbieten, die - obwohl es reine rohe Gewalt und nicht im geringsten elegant ist - das einzige war, was für mich auf der Kommandozeile funktioniert hat. Ich habe eine Liste der Dateien erstellt und sie in ein Skript eingefügt:

Generieren Sie Ihre Dateiliste:

find my-dir -exec echo "put /Users/username/"{} {}  \;

Kopieren Sie sie und fügen Sie sie in das Skript ein:

#!/bin/bash

hostname="my-ftp-host"
username="username"
password="password"
ftp -in $hostname <<EOF
quote USER $username
quote PASS $password

binary
cd 123456
{COPY THE LIST HERE}
quit
EOF
dgig
quelle
0

FileZilla ist dafür großartig. Wenn Sie nichts herunterladen / installieren möchten, können Sie dies mit dem Internet Explorer tun. Gehen Sie zu den erweiterten Optionen und wählen Sie Enable FTP folder view (outside of Internet Explorer). Anschließend können Sie ein Explorer-Fenster auf Ihren FTP-Server verweisen und Dateien und Ordner zwischen Explorer-Fenstern ziehen und ablegen.

Jim Fell
quelle
0

Firefox hat ein Plug-In namens FireFtp , das ein netter FTP-Client ist.

Jet
quelle
0

Das Zielverzeichnis ist eine Zip-Datei. Sie können die vollständige ZIP-Datei mit dem folgenden Code auf den FTP-Server kopieren.

//Taking source and target directory path
string sourceDir = FilePath + "Files\\" + dsCustomer.Tables[0].Rows[i][2].ToString() + "\\ConfigurationFile\\" + dsSystems.Tables[0].Rows[j][0].ToString() + "\\XmlFile";

string targetDir = FilePath + "Files\\Customers\\" + CustomerName + "\\" + SystemName + "\\";                                                                                       
foreach (var srcPath in Directory.GetFiles(sourceDir))
{
    //Taking file name which is going to copy from the sourcefile                                              
    string result = System.IO.Path.GetFileName(srcPath);

    //If that filename exists in the target path
    if (File.Exists(targetDir + result))
    {
        //Copy file with a different name(appending "Con_" infront of the original filename)
        System.IO.File.Copy(srcPath, targetDir + "Con_" + result);
    }
    //If not existing filename
    else
    {
        //Just copy. Replace bit is false here. So there is no overwiting.
        File.Copy(srcPath, srcPath.Replace(sourceDir, targetDir), false);
    }
}         
user606353
quelle
Das ist schön, aber Ihr Programm kompiliert nicht.
DavidPostill
0

Meine Antwort ist eine Variation von @dgigs Antwort.

Sie können alle Dateien auflisten und sie (einschließlich des Befehls put) in einer Datei speichern:

find my-dir -exec echo "put /Users/username/"{} {} > list.txt \; 

und dann benutze sftp um die Datei zu verarbeiten:

sftp -C -b sftpbatchfile.txt name@server

-Cist für die Komprimierung, -bist für die Batch-Datei

Juraj.Lorinc
quelle
Dies verwendet FTP nicht wie gewünscht. Das sftpProgramm verwendet das SFTP-Protokoll, das ein anderes Protokoll ist, obwohl es einige Buchstaben gemeinsam hat. Und Sie haben den enter code hereRest nicht bearbeitet .
dave_thompson_085