FTP copiar um ficheiro para outro local no mesmo FTP

Preciso de enviar o mesmo ficheiro para 2 locais diferentes no mesmo FTP. Existe uma maneira de copiar o arquivo no FTP para o outro lugar em vez de carregá-lo novamente? Obrigado.

 14
ftp
Author: Stan, 2010-09-28

9 answers

Eu não acho que haja uma maneira de copiar arquivos sem baixar e recarregar, pelo menos eu não encontrei nada parecido com isso na lista de comandos FTP e nenhum cliente que eu tenha visto até agora suportou algo assim.

 9
Author: schnaader, 2014-08-28 07:35:54
Não há uma forma normal de duplicar um ficheiro remoto através do protocolo FTP. Alguns servidores FTP suportam extensões proprietárias ou não-padrão para isso.

Alguns clientes de FTP suportam a duplicação de ficheiros remotos. Usando as extensões ou através de uma cópia local temporária do ficheiro remoto.

Por exemplo O cliente FTP do WinSCP suporta a duplicação usando tanto o comando drag&drop como o menu / teclado:

  • suporta o SITE CPFR/CPTO Extensão FTP (suportada, por exemplo, pelo módulo ProFTPD mod_ copy)
  • recai sobre uma duplicação automática através de uma cópia local temporária, se a extensão acima não estiver disponível.

(sou o autor do WinSCP)


Outra solução consiste em Abrir uma segunda ligação ao servidor FTP e fazer com que o servidor envie o ficheiro para si próprio, encaminhando uma ligação de dados de modo passivo para uma ligação de dados de modo activo. Esta solução é mostrado na resposta por @SaadAchemlal .


Nota Lateral: as pessoas confundem frequentemente movimento comcópia . No caso de você realmente querer mover , então essa é uma pergunta completamente diferente. Mover o ficheiro em FTP é amplamente suportado.

 15
Author: Martin Prikryl, 2018-07-22 15:16:35

SIM, o protocolo FTP em si pode suportar isso em teoria. O FTP RFC 959 discute isto na Secção 5.2 (ver o parágrafo a começar por " Quando os dados devem ser transferidos entre dois servidores, A E B..."). No entanto, não conheço nenhum cliente que ofereça este tipo de operação de controle de servidor duplo.

Note que este método pode transferir o ficheiro do servidor FTP para si próprio usando a sua própria rede, que não será tão rápida como uma cópia de ficheiro local, mas que quase certamente seja mais rápido do que baixar e, em seguida, recarregar o arquivo.

 9
Author: Greg Hewgill, 2010-09-28 00:26:53

Posso copiar ficheiros entre pastas remotas em sistemas baseados em Linux. No meu caso particular, estou a usar um gestor de Ficheiros muito comum PCManFM:

  • Menu " Go "-- > "Connect to server"
  • Informação de autenticação FTP, etc
  • abrir uma página nova no PCManFM
  • Ligar ao mesmo servidor
  • copiar da página para a página...
É um pouco lento, então eu acho que ele pode estar baixando e enviando de volta os arquivos, mas é feito automaticamente e muito fácil de usar.
 1
Author: aesede, 2015-08-04 20:54:06

O código abaixo faz com que o servidor FTP envie o ficheiro para si próprio (usando a ligação loopback). Ele precisa do servidor FTP para permitir o modo de conexão passivo e ativo.

Se quiser compreender os comandos ftp aqui está uma lista deles: Lista de comandos 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
Author: Saad Achemlal, 2017-10-17 14:28:43

Consegui fazer isto usando o WebDrive para montar o ftp como uma pasta local, e depois" transferir " os ficheiros usando o filezilla directamente para a pasta. Foi um pouco mais lento do que o download normal é, mas você não precisa ter o espaço em seu hdd.

 0
Author: Acelasi Eu, 2014-04-09 17:53:59
A mudança de nome resultou mesmo! Em delphi:
  clFTP.Rename(lbList.Items[lbList.ItemIndex], '/z/a.txt');
  FillDirList();
 -1
Author: Hosein, 2018-05-15 17:16:43

Podes fazer isto a partir do Painel C.

  1. entra no teu Painel C.
  2. Entra no Gestor de ficheiros.
  3. Encontre o ficheiro ou pasta que deseja duplicar.
  4. Clique com o botão direito e escolha a cópia.
  5. Digite o novo diretor que você quer copiar.
Feito!
 -2
Author: Sabbir, 2017-01-12 16:46:46

Pode mudar o nome do ficheiro a ser copiado para a localização completa do seu resultado desejado.

Por exemplo: Se quiser mover o ficheiro".txt "na pasta" NewFolder " você pode escrevê-la como

ftp> rename file.txt NewFolder/file.txt
Isto funcionou comigo.
 -4
Author: user166463, 2014-06-26 12:02:43