2010-09-28 8 views

Répondre

9

Je ne pense pas qu'il existe un moyen de copier des fichiers sans télécharger et re-télécharger, au moins, je n'ai rien trouvé de tel dans le List of FTP commands et aucun client que j'ai vu jusqu'ici supporté quelque chose comme ça.

9

Oui, le protocole FTP lui-même peut le supporter en théorie. Le FTP RFC 959 en parle dans la section 5.2 (voir le paragraphe commençant par "Quand les données doivent être transférées entre deux serveurs, A et B ..."). Cependant, je ne connais aucun client qui offre ce genre d'opération de contrôle à double serveur. Notez que cette méthode pourrait transférer le fichier du serveur FTP vers lui-même en utilisant son propre réseau, ce qui ne sera pas aussi rapide qu'une copie de fichier locale, mais sera certainement plus rapide que le téléchargement et le ré-uploadage du fichier.

+1

Je me demande si vous avez utilisé cela et spécifié localhost si vous pouvez contourner ce goulot d'étranglement mineur. Même ainsi, nous devons considérer que de nombreux serveurs FTP bloquent FXP (également connu sous le nom de transferts de serveur à serveur) en raison de "attaques de rebond FTP". Mais un serveur FTP intelligent ne le bloquera pas pour localhost. Cependant, cela pourrait bloquer tout FXP. – SilentSteel

0

J'ai réussi à faire cela en utilisant WebDrive pour monter le ftp en tant que dossier local, puis "télécharger" les fichiers en utilisant filezilla directement dans le dossier. Il était un peu plus lent que le téléchargement normalement, mais vous n'avez pas besoin de l'espace sur votre disque dur.

+0

Je pense qu'il va encore télécharger le fichier temporairement sur votre machine, puis le télécharger immédiatement sur votre webdrive. Je suppose que vous aurez toujours besoin d'un espace disque suffisant pour y parvenir. –

-4

Vous pouvez renommer le fichier à copier dans le chemin complet de votre résultat souhaité.

Par exemple: Si vous voulez déplacer le fichier « fichier.txt » dans le dossier « NewFolder », vous pouvez l'écrire comme

ftp> rename file.txt NewFolder/file.txt 

Cela a fonctionné pour moi.

+1

Cela manque le point de la question - OP explicitement demandé à propos de * copie *, pas de * déplacement * – codeling

1

Je peux copier des fichiers entre des dossiers distants dans des systèmes basés sur Linux. Dans mon cas particulier, je suis en utilisant le gestionnaire de fichiers très commun PCManFM:

  • Menu "Go" -> "Se connecter au serveur"
  • information Connexion FTP, etc
  • Ouvrir un nouvel onglet dans PCManFM
  • se connecter au même serveur
  • Copie d'un onglet à ...

il est un peu lent, donc je suppose que cela pourrait être le téléchargement et rechargeant la fichiers, mais c'est fait automatiquement et très convivial.

13

Il n'existe aucun moyen standard de dupliquer un fichier distant sur le protocole FTP. Certains serveurs FTP prennent en charge les extensions propriétaires ou non standard pour cela.


Certains clients FTP prennent en charge la duplication de fichiers distants. Soit en utilisant les extensions ou via une copie locale temporaire du fichier distant.

Par exemple WinSCP FTP client ne support the duplication utilisant à la fois glisser & déposer et commande de menu/clavier:

  • Il prend en charge le SITE CPFR/CPTO l'extension FTP (pris en charge par exemple par le ProFTPD mod_copy module)
  • Il revient à un duplication automatique via une copie temporaire locale, si l'extension ci-dessus n'est pas disponible.

(je suis l'auteur de WinSCP)


Une autre solution consiste à ouvrir une deuxième connexion au serveur FTP et que le serveur télécharger le fichier sur lui-même en redirigeant un mode passif connexion de données à une connexion de données en mode actif. Cette solution est illustrée dans le answer by @SaadAchemlal.

+6

Je tiens à vous remercier pour l'outil génial qui est WinSCP. – Fatih

-2

Vous pouvez le faire depuis C-Panel.

  1. Connectez-vous à votre C-Panel.
  2. Entrer dans le gestionnaire de fichiers.
  3. Recherchez le fichier ou le dossier que vous souhaitez dupliquer.
  4. Cliquez avec le bouton droit de la souris et choisissez Copier.
  5. Entrez le nouveau directeur dans lequel vous souhaitez copier.

Fait!

+4

1) ne laissez pas de 'signature' dans votre message, c'est là que votre profil est pour 2) C-Panel n'est disponible que dans des cas très spécifiques. – Glorfindel

1

Le code ci-dessous permet au serveur FTP de télécharger le fichier sur lui-même (en utilisant la connexion de bouclage). Il a besoin du serveur FTP pour autoriser le mode de connexion passif et actif.

Si vous voulez comprendre les commandes ftp voici une liste: 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 Eh bien laissez-moi vous dire que cela fonctionne parce que je l'utilise personnellement sur un Synology Nas. De plus, il répond à la question parce que vous avez juste besoin de télécharger votre fichier sur le ftp une fois et d'utiliser ma fonction pour le copier où vous voulez sans le télécharger à nouveau. S'il vous plaît la prochaine fois essayer de tester une solution avant de dire que cela ne fonctionnera pas :) –

+0

Désolé, vous avez raison, je n'ai pas lu le code attentivement. Bien que la prochaine fois, incluez quelques explications dans vos messages, pour éviter toute confusion. +1 + J'ai lié votre réponse à la mienne. –

+0

Je vais essayer d'expliquer plus la prochaine fois.Merci pour l'édition;) –

Questions connexes