FTP скопировать файл в другое место на том же FTP - PullRequest
19 голосов
/ 28 сентября 2010

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

Ответы [ 9 ]

20 голосов
/ 17 сентября 2015

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


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

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

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

(я автор WinSCP)


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


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

10 голосов
/ 28 сентября 2010

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

9 голосов
/ 28 сентября 2010

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

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

1 голос
/ 17 октября 2017

Приведенный ниже код заставляет FTP-сервер загружать файл самому себе (используя петлевое соединение). Ему нужен 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");
}
1 голос
/ 04 августа 2015

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

  • Меню «Перейти» -> «Подключиться к серверу»
  • Информация для входа на FTP и т. Д.
  • Открыть новую вкладку в PCManFM
  • Подключиться к тому же серверу
  • Копировать с вкладки на вкладку ...

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

0 голосов
/ 15 мая 2018

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

  clFTP.Rename(lbList.Items[lbList.ItemIndex], '/z/a.txt');
  FillDirList();
0 голосов
/ 12 января 2017

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

  1. Войдите в свою C-Panel.
  2. Зайди в файловый менеджер.
  3. Найдите файл или папку, которую вы хотите скопировать.
  4. Щелкните правой кнопкой мыши и выберите «Копировать».
  5. Введите нового директора, в которого вы хотите скопировать.

Готово!

0 голосов
/ 26 июня 2014

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

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

ftp> rename file.txt NewFolder/file.txt

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

0 голосов
/ 09 апреля 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...