Ich muss einen vollständigen Ordner über FTP hochladen. Gibt es eine Option zum gleichzeitigen Übertragen eines Ordners und seines gesamten Inhalts?
Ich muss einen vollständigen Ordner über FTP hochladen. Gibt es eine Option zum gleichzeitigen Übertragen eines Ordners und seines gesamten Inhalts?
Antworten:
Wenn Sie einen Standardbefehlszeilen-FTP-Client verwenden, können Sie mit dem MPUT
Befehl alle Dateien übertragen, die einem (Shell-Glob-ähnlichen) Muster entsprechen, MPUT *
und alle Dateien im aktuellen Verzeichnis senden. Es gibt auch MGET
Dateien, die mit einem Muster übereinstimmen.
Standardmäßig werden beide MPUT
und MGET
gefragt, 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).
Sie können ncftpput verwenden. Mach Folgendes:
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/*
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.
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:
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 WebsiteC:\yourFolderDirectoryHere\*
wählt alles drinnen aus C:\yourFolderDirectoryHere
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
Überprüfen Sie dies aus .
Sie können auch programmgesteuert einen Ordner auf dem Server erstellen und dann alle Dateien in diesen neuen Ordner hochladen.
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.
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);
}
}
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
-C
ist für die Komprimierung, -b
ist für die Batch-Datei
sftp
Programm verwendet das SFTP-Protokoll, das ein anderes Protokoll ist, obwohl es einige Buchstaben gemeinsam hat. Und Sie haben den enter code here
Rest nicht bearbeitet .