Мне нужно загрузить полную папку, используя FTP. Есть ли возможность перенести папку и все ее содержимое сразу?
11 ответов
Если вы используете стандартный ftp-клиент из командной строки, команда MPUT
позволит вам передать все файлы, соответствующие шаблону (shell-glob-style), поэтому MPUT *
отправит все файлы в текущем каталоге. Существует также MGET
для получения файлов, соответствующих шаблону.
По умолчанию и MPUT
и MGET
запрашивают, передавать ли каждый файл перед этим. Возможно, вы захотите отключить подсказку с помощью команды "PROMPT" (без аргументов; это переключение).
Вы можете использовать ncftpput. Сделайте следующее:
Установите ncftp:
yum install ncftp
ням строчная.
В качестве альтернативы:
apt-get install ncftp
2. Выполните следующую команду:
ncftpput -R -v -u "ftp-username" ftp.website.com ftp-upload-path local-path/*
Используйте FTP-клиент, такой как LeechFTP или FileZilla или что-то подобное. Многие люди клянутся CuteFTP, но это условно-бесплатная последняя проверка, которую я проверял. Вся поддержка переноса всей папки, включая структуру каталогов.
- попросить пользователя / клиента сжать папку
- загрузить ZIP-файл
- разархивируйте папку на стороне сервера.
Простое руководство для других новичков Windows, таких как я, которые попали сюда:
Самый простой способ загрузить всю папку (со всеми подпапками и файлами в них):
- Скачать NcFTP Client (это бесплатно, но вы можете пожертвовать) по этой ссылке.
- Выберите NcFTP Client 3.2.5 для Microsoft Windows из списка.
- Установите это.
- Когда закончите, появится маленькое окно CMD со значком вишни. Тебе это не нужно.
- Просто откройте стандартное окно CMD и введите:
ncftpput -u * yourUserNameHere * -p * yourUserPasswordHere * -R * www.yourWebsite.com * /_C:\yourFolderDirectoryHere\\* _
(одной строкой).
Обратите внимание, что:
-R
- флаг для "рекурсивный"; это делает команду копировать все подпапки рекурсивно/
(косая черта) является корневым каталогом вашего сайтаC:\yourFolderDirectoryHere\*
выделяет все внутриC:\yourFolderDirectoryHere
Я предложу ответ, который - хотя это чисто грубая сила и ни в коем случае не элегантный - был единственным, что сработало для меня в командной строке. Я создал список файлов и поместил их в скрипт:
создать свой список файлов:
find my-dir -exec echo "put /Users/username/"{} {} \;
скопируйте и вставьте их в скрипт:
#!/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
Проверьте это.
Вы также можете программно создать папку на сервере, а затем загрузить все файлы в эту новую папку.
FileZilla отлично подходит для этого. Если вы не хотите ничего скачивать / устанавливать, это можно сделать с помощью Internet Explorer. Перейдите в дополнительные параметры и выберите « Enable FTP folder view (outside of Internet Explorer)
. Затем вы можете направить окно обозревателя на свой FTP-сервер и перетаскивать файлы и папки между окнами обозревателя.
Firefox имеет плагин под названием FireFtp, который является хорошим FTP-клиентом.
Мой ответ - это вариант ответа @dgig.
Вы можете перечислить все файлы и сохранить их (включая команду put) в файл:
find my-dir -exec echo "put /Users/username/"{} {} > list.txt \;
а затем используйте sftp для обработки файла:
sftp -C -b sftpbatchfile.txt name@server
-C
для сжатия, -b
для пакетного файла
Целевой каталог - это zip-файл. Вы можете скопировать полный zip-файл на ftp-сервер, используя приведенный ниже код.
//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);
}
}