Подтвердить что ты не робот

FTP копирует файл в другое место на одном FTP

Мне нужно загрузить тот же файл в 2 разных места на одном FTP. Есть ли способ скопировать файл на FTP в другое место, а не загружать его снова? Спасибо.

4b9b3361

Ответ 1

Я не думаю, что есть способ скопировать файлы без загрузки и повторной загрузки, по крайней мере, я не нашел ничего подобного в Список FTP-команд и ни один клиент, которого я видел, не поддерживал что-то вроде этого.

Ответ 2

Не существует стандартного способа дублирования удаленного файла по протоколу FTP. Некоторые FTP-серверы поддерживают собственные или нестандартные расширения для этого.


Некоторые FTP-клиенты поддерживают удаленное дублирование файлов. Используя расширения или временную локальную копию удаленного файла.

Например, WinSCP FTP-клиент поддерживает дублирование, используя команды перетаскивания и команды меню/клавиатуры:

  • Он поддерживает расширение FTP SITE CPFR/CPTO (поддерживается, например, модулем ProFTPD mod_copy)
  • Он возвращается к автоматическому дублированию через локальную временную копию, если указанное расширение недоступно.

(Я автор WinSCP)


Другой обходной путь - открыть второе подключение к FTP-серверу и заставить сервер выгружать файл себе, передавая соединение для передачи данных в пассивном режиме в соединение для передачи данных в активном режиме. Это решение показано в ответе @SaadAchemlal. Это в основном использование протокола FXP, но для одного сервера. Хотя многие FTP-серверы отклонят это, поскольку они не разрешают подключение к данным с адреса, отличного от адреса клиента.


Примечание: люди часто путают движение с копией. Если вы действительно хотите переехать, тогда это совершенно другой вопрос. Перемещение файла на FTP широко поддерживается.

Ответ 3

Да, сам протокол FTP может теоретически поддерживать это. FTP RFC 959 обсуждает это в разделе 5.2 (см. Параграф, начинающийся с "Когда данные должны быть переданы между двумя серверами, A и B..".). Тем не менее, я не знаю ни одного клиента, который предлагает эту операцию с двумя серверами.

Обратите внимание, что этот метод может передать файл с FTP-сервера самому себе, используя свою собственную сеть, которая не будет такой быстрой, как локальная копия файла, но почти наверняка будет быстрее, чем загрузка и повторная загрузка файла.

Ответ 4

Я могу копировать файлы между удаленными папками в системах на базе Linux. В моем конкретном случае я использую очень распространенный файловый менеджер PCManFM:

  • Меню "Перейти" → "Подключение к серверу"
  • FTP Login info и т.д.
  • Откройте новую вкладку в PCManFM
  • Подключиться к тому же серверу
  • Скопировать с вкладки на вкладку...

Это немного медленнее, поэтому я думаю, что это может быть загрузка и загрузка файлов, но это сделано автоматически и очень удобно.

Ответ 5

Приведенный ниже код позволяет FTP-серверу загружать файл сам по себе (используя loopback-соединение). Для FTP-сервера необходим как пассивный, так и активный режим подключения.

Если вы хотите понять команды ftp, вот список из них: Список ftp-команд

function copyFile($filePath, $newFilePath)
{
    $ftp1 = ftp_connect('192.168.1.1');
    $ftp2 = ftp_connect('192.168.1.1');
    ftp_raw($ftp1, "USER ftpUsername");
    ftp_raw($ftp1, "PASS mypassword");
    ftp_raw($ftp2, "USER ftpUsername");
    ftp_raw($ftp2, "PASS mypassword");

    $res = ftp_raw($ftp2, "PASV");
    $addressAndPort = substr($res[0], strpos($res[0], '(') + 1);
    $addressAndPort = substr($addressAndPort, 0, strpos($addressAndPort, ')'));

    ftp_raw($ftp1, "CWD ." . dirname($newFilePath));
    ftp_raw($ftp2, "CWD ." . dirname($filePath));
    ftp_raw($ftp1, "PORT ".$addressAndPort);

    ftp_raw($ftp1, "STOR " . basename($newFilePath));
    ftp_raw($ftp2, "RETR " . basename($filePath));

    ftp_raw($ftp1, "QUIT");
    ftp_raw($ftp2, "QUIT");
}

Ответ 6

Мне удалось это сделать, используя WebDrive для монтирования ftp как локальной папки, а затем "загрузить" файлы с помощью filezilla непосредственно в папку. Это было немного медленнее, чем обычно загрузка, но вам не нужно иметь место на вашем hdd.

Ответ 7

Переименование действительно сработало! В delphi:

  clFTP.Rename(lbList.Items[lbList.ItemIndex], '/z/a.txt');
  FillDirList();

Ответ 8

Вы можете сделать это с C-Panel.

  • Войдите в свою C-панель.
  • Перейдите в диспетчер файлов.
  • Найдите файл или папку, которую вы хотите дублировать.
  • Щелкните правой кнопкой мыши и выберите "Копировать".
  • Введите новый режиссер, который вы хотите скопировать.

Готово!

Ответ 9

Вы можете переименовать файл, который будет скопирован в полный путь к вашему желаемому результату.

Например: Если вы хотите переместить файл "file.txt" в папку "NewFolder", вы можете записать его как

ftp> rename file.txt NewFolder/file.txt

Это сработало для меня.