2010-09-28 39 views

Respuesta

9

No creo que haya una manera de copiar archivos sin descargar y volver a cargar, al menos no encontré nada como esto en el List of FTP commands y ningún cliente que he visto hasta ahora admite algo como esto.

9

Sí, el protocolo FTP en sí mismo puede soportar esto en teoría. El FTP RFC 959 analiza esto en la sección 5.2 (consulte el párrafo que comienza con "Cuando los datos se transfieren entre dos servidores, A y B ..."). Sin embargo, no conozco ningún cliente que ofrezca este tipo de operación de control de servidor dual.

Tenga en cuenta que este método podría transferir el archivo del servidor FTP a sí mismo utilizando su propia red, que no será tan rápida como una copia de archivo local, pero casi con certeza será más rápido que descargar y volver a cargar el archivo.

+1

Me pregunto si se ha utilizado este y ha especificado localhost si usted podría conseguir alrededor de ese cuello de botella de menor importancia. Aun así, debemos tener en cuenta que muchos servidores FTP bloquean FXP (también conocido como transferencias de servidor a servidor) debido a los "ataques de rebote de FTP". Pero un servidor FTP inteligente no lo bloqueará para localhost. Aún así, podría bloquear a todos los FXP. – SilentSteel

0

Logré hacer esto usando WebDrive para montar el ftp como una carpeta local, luego "descargar" los archivos usando filezilla directamente a la carpeta. Fue un poco más lento de lo que normalmente es la descarga, pero no necesita tener el espacio en su disco duro.

+0

Creo que todavía descargará el archivo temporalmente a su máquina y luego lo cargará inmediatamente a su unidad web. Sospecho que aún necesitarás un espacio de disco adecuado para lograrlo. –

-4

Puede cambiar el nombre del archivo que se va a copiar en la ruta completa del resultado deseado.

Por ejemplo: Si desea mover el archivo "archivo.txt" en la carpeta "NewFolder" se puede escribir como

ftp> rename file.txt NewFolder/file.txt 

Esto funcionó para mí.

+1

Esto no tiene sentido: OP me preguntó explícitamente acerca de * copiar *, no sobre * mover * – codeling

1

Puedo copiar archivos entre carpetas remotas en sistemas basados ​​en Linux. En mi caso particular, estoy usando muy común administrador de archivos PCManFM:

  • menú "Go" -> "Conectarse al servidor"
  • inicio de sesión FTP información, etc
  • nueva pestaña abierta en PCManFM
  • Conectar al mismo servidor
  • Copia de una pestaña a ...

es un poco lento, así que supongo que se podría descargar y cargar la espalda archivos, pero se hace de forma automática y muy fácil de usar.

13

No hay una forma estándar de duplicar un archivo remoto a través del protocolo FTP. Sin embargo, algunos servidores FTP admiten extensiones propietarias o no estándar.


Algunos clientes FTP admiten la duplicación remota de archivos. Ya sea usando las extensiones o mediante una copia local temporal del archivo remoto.

Por ejemplo WinSCP FTP client hace support the duplication utilizando tanto arrastre & gota y comando de menú/teclado:

  • Es compatible con la extensión FTP SITE CPFR/CPTO (soportado por ejemplo por el ProFTPD mod_copy module)
  • Se cae de nuevo a una duplicación automática a través de una copia temporal local, si la extensión anterior no está disponible.

(yo soy el autor de WinSCP)


Otra solución consiste en abrir una segunda conexión con el servidor FTP y hacer que el servidor cargar el archivo en sí mismo mediante la canalización de un modo pasivo conexión de datos a una conexión de datos en modo activo. Esta solución se muestra en el answer by @SaadAchemlal.

+6

Me gustaría agradecerle la increíble herramienta que es WinSCP. – Fatih

-2

Puede hacerlo desde C-Panel.

  1. Inicie sesión en su C-Panel.
  2. Ir al administrador de archivos.
  3. Encuentra el archivo o la carpeta que deseas duplicar.
  4. Haga clic derecho y elija Copiar.
  5. Escriba el nuevo director que desea copiar.

¡Hecho!

+4

1) no deje una 'firma' en su publicación, ahí es donde su perfil es para 2) C-Panel solo está disponible en casos muy específicos. – Glorfindel

1

El siguiente código hace que el servidor FTP cargue el archivo a sí mismo (utilizando la conexión de bucle invertido). Necesita el servidor FTP para permitir el modo de conexión activo y pasivo.

Si usted quiere entender los comandos ftp aquí es una lista de ellos: List of ftp commands

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"); 
} 
+0

@MartinPrikryl Bueno, déjame decirte que funciona porque lo uso personalmente en Synology Nas. Además, responde la pregunta porque solo necesitas subir tu archivo al ftp una vez y usar mi función para copiarlo donde quieras sin tener que volver a cargarlo. La próxima vez intenta probar una solución antes de decir que no funcionará :) –

+0

Lo siento, tienes razón, no leí el código con cuidado. Aunque la próxima vez, incluya alguna explicación en sus publicaciones, para evitar confusiones. +1 + He vinculado tu respuesta con la mía. –

+0

Trataré de explicar más la próxima vez.Gracias por la edición;) –