2010-09-28 8 views

risposta

9

Non penso che ci sia un modo per copiare i file senza scaricare e ricaricare, almeno non ho trovato nulla di simile nel List of FTP commands e nessun client che ho visto finora supportato qualcosa di simile.

9

Sì, lo stesso protocollo FTP può supportarlo in teoria. Lo FTP RFC 959 ne parla nella sezione 5.2 (vedere il paragrafo che inizia con "Quando i dati devono essere trasferiti tra due server, A e B ..."). Tuttavia, non conosco nessun client che offre questo tipo di operazione di controllo a doppio server.

Si noti che questo metodo potrebbe trasferire il file dal server FTP a se stesso utilizzando la propria rete, che non sarà veloce come una copia di file locale, ma sarebbe quasi certamente più veloce del download e quindi di nuovo caricamento del file.

+1

Mi chiedo se è stato utilizzato questo e specificato localhost se si potrebbe ottenere intorno a quel collo di bottiglia minore. Anche così, dobbiamo considerare che molti server FTP bloccano FXP (noto anche come trasferimenti da server a server) a causa di "attacchi di rimbalzo FTP". Ma un server FTP intelligente non lo bloccherà per localhost. Tuttavia, potrebbe semplicemente bloccare tutti gli FXP. – SilentSteel

0

Sono riuscito a farlo utilizzando WebDrive per montare il ftp come cartella locale, quindi "scaricare" i file utilizzando filezilla direttamente nella cartella. È stato un po 'più lento del download normalmente, ma non è necessario avere lo spazio sul tuo hdd.

+0

Penso che scaricherà il file temporaneamente sul tuo computer e lo caricherà immediatamente sul tuo webdrive. Sospetto che tu abbia ancora bisogno di uno spazio su disco adeguato per riuscirci. –

-4

È possibile rinominare il file da copiare nel percorso completo del risultato desiderato.

Ad esempio: Se si desidera spostare il file "file.txt" nella cartella "NewFolder" è possibile scrivere come

ftp> rename file.txt NewFolder/file.txt 

Questo ha funzionato per me.

+1

Manca il punto della domanda - OP esplicitamente chiesto di * copiare *, non di * spostare * – codeling

1

Posso copiare i file tra le cartelle remote nei sistemi basati su Linux. Nel mio caso particolare, sto usando molto comune PCManFM file manager:

  • menu "Vai" -> "Connessione al server" informazioni
  • Login FTP, ecc
  • Apri nuova scheda in PCManFM
  • Connettersi al server stesso
  • Copia da una scheda all'altra ...

e 'un po' lento, quindi credo che potrebbe essere download e l'upload di nuovo il file, ma è fatto automaticamente e molto user-friendly.

13

Non esiste un modo standard per duplicare un file remoto tramite il protocollo FTP. Tuttavia, alcuni server FTP supportano estensioni proprietarie o non standard.


Alcuni client FTP supportano la duplicazione file remoto. O utilizzando le estensioni o tramite una copia locale temporanea del file remoto.

Ad esempio WinSCP FTP client fa support the duplication utilizzando sia trascinamento & drop e comando/tastiera:

  • supporta l'estensione FTP SITE CPFR/CPTO (supportato per esempio dal ProFTPD mod_copy module)
  • Si ricade un duplicazione automatica tramite una copia temporanea locale, se l'estensione sopra non è disponibile.

(io sono l'autore di WinSCP)


Un'altra soluzione è quella di aprire una seconda connessione al server FTP e rendere il server caricare il file su se stesso convogliando una modalità passiva connessione dati a una connessione dati in modalità attiva. Questa soluzione è mostrata nello answer by @SaadAchemlal.

+6

Vorrei ringraziarvi per lo straordinario strumento che è WinSCP. – Fatih

-2

È possibile eseguire questa operazione da C-Panel.

  1. Accedi al tuo C-Panel.
  2. Accedi al file manager.
  3. Trova il file o la cartella che si desidera duplicare.
  4. Fare clic con il tasto destro e scegliere Copia.
  5. Inserire il nuovo regista su cui si desidera copiare.

Fatto!

+4

1) non lasciare una "firma" nel tuo post, è lì che il tuo profilo è per 2) C-Panel è disponibile solo in casi molto specifici. – Glorfindel

1

Il codice seguente consente al server FTP di caricare il file su se stesso (utilizzando la connessione loopback). Ha bisogno del server FTP per consentire sia la modalità di connessione passiva che quella attiva.

Se si vuole comprendere i comandi FTP: ecco un elenco di loro: 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 Beh, lascia che ti dica che funziona perché uso questo personale su un Synology Nas. Inoltre risponde alla domanda perché devi solo caricare il tuo file sul ftp una volta e usare la mia funzione per copiarlo dove vuoi senza caricarlo di nuovo. La prossima volta prova a testare una soluzione prima di dire che non funzionerà :) –

+0

Scusa, hai ragione, non ho letto attentamente il codice. Anche se la prossima volta, includi alcune spiegazioni nei tuoi post, per evitare confusione. +1 + Ho collegato la tua risposta dalla mia. –

+0

Proverò a spiegare di più la prossima volta. Grazie per la modifica;) –