Puis-je télécharger un dossier entier en utilisant FTP?

29

J'ai besoin de télécharger un dossier complet via FTP. Existe-t-il une option pour transférer un dossier et tout son contenu à la fois?

Jeff Atwood
la source

Réponses:

24

Si vous utilisez un client ftp de ligne de commande standard, la MPUTcommande vous permettra de transférer tous les fichiers correspondant à un modèle (style glob shell), ainsi MPUT *enverra tous les fichiers dans le répertoire courant. Il y a aussi MGETpour récupérer des fichiers correspondant à un motif.

Par défaut, les deux MPUTet MGETvous inviteront à transférer chaque fichier avant de le faire. Vous voudrez probablement désactiver l'invite avec la commande "PROMPT" (aucun argument; c'est une bascule).

Dave Sherohman
la source
Cette question venait à l'origine de stackoverflow, donc je pense que ce devrait être la réponse acceptée. Bien que le demandeur d'origine semble avoir disparu, il ne va pas en accepter un ....
codetaku
Avertissement: le client de ligne de commande FTP fourni avec Windows ne prend pas en charge le mode passif. L'utilisation de cette technique peut donc vous faire perdre du temps. Cela s'est produit dans mon cas, car j'avais besoin de télécharger des fichiers et j'utilisais la ligne de commande Windows avec des outils installés en mode natif.
sean2078
1
Il transférera tous les fichiers ordinaires dans le répertoire courant mais il ne transférera pas récursivement les répertoires présents. Il les ignorera simplement en silence
bergercookie
22

Vous pouvez utiliser ncftpput. Procédez comme suit:

  1. Installez ncftp:

    yum install ncftp
    

miam est en minuscules.

Alternativement:

    apt-get install ncftp

2. Exécutez la commande suivante:

    ncftpput -R -v -u "ftp-username" ftp.website.com ftp-upload-path local-path/*
Mohamed BK
la source
Le Yum doit être changé en yum - car il est sensible à la casse.
olekeh
1
Voici toutes les options CLI pour ncftpput: ncftp.com/ncftp/doc/ncftpput.html
Pepijn Olivier
8

Utilisez un client FTP tel que LeechFTP ou FileZilla ou quelque chose de similaire. Beaucoup de gens ne jurent que par CuteFTP, mais c'est le dernier shareware que j'ai vérifié. Tous prennent en charge le transfert d'un dossier entier, y compris la structure du répertoire.

Joshua Nurczyk
la source
1
+1 pour FileZilla: filezilla-project.org/download.php?type=client
William Jackson
5
  1. demander à l'utilisateur / client de compresser le dossier
  2. télécharger le fichier zip
  3. décompressez le côté serveur de dossiers .
Chase Florell
la source
note: ma réponse a été publiée sur StackOverflow. C'est pourquoi il fait référence à une solution de "codage".
Chase Florell
2

Un tutoriel simple pour les autres débutants Windows comme moi qui se retrouvent ici:

La façon la plus simple de télécharger un dossier entier (avec tous les sous-dossiers et fichiers) est:

  1. Téléchargez NcFTP Client (c'est gratuit, mais vous pouvez faire un don) à partir de ce lien .
  2. Choisissez NcFTP Client 3.2.5 pour Microsoft Windows dans la liste.
  3. Installez-le.
  4. Une fois terminé, une petite fenêtre CMD avec une icône cerises apparaîtra. Vous n'en avez pas besoin.
  5. Ouvrez simplement une fenêtre CMD standard et tapez:
    ncftpput -u * yourUserNameHere * -p * yourUserPasswordHere * -R * www.yourWebsite.com * /
                     _C: \ yourFolderDirectoryHere \\ * _
    (en une seule ligne).

Notez que:

  • -R est un drapeau pour "récursif"; il fait que la commande copie récursivement tous les sous-dossiers
  • / (barre oblique) est le répertoire racine de votre site Web
  • C:\yourFolderDirectoryHere\* sélectionne tout à l'intérieur C:\yourFolderDirectoryHere
DBS
la source
semble agréable, mais le serveur a interdit mon adresse IP en disant que j'ai fait 800 connexions dans un court intervalle. aucun moyen de réduire le nombre de connexions. UN AUTRE problème est que je ne sais pas ignorer le téléchargement si le fichier de destination existe déjà.
16851556
2

Je vais vous proposer une réponse qui - bien qu'elle soit pure force brute et pas élégante du tout - était la seule chose qui a fonctionné pour moi sur la ligne de commande. J'ai créé une liste des fichiers et les ai mis dans un script:

générer votre liste de fichiers:

find my-dir -exec echo "put /Users/username/"{} {}  \;

copiez-les et collez-les dans le script:

#!/bin/bash

hostname="my-ftp-host"
username="username"
password="password"
ftp -in $hostname <<EOF
quote USER $username
quote PASS $password

binary
cd 123456
{COPY THE LIST HERE}
quit
EOF
dgig
la source
0

FileZilla est idéal pour cela. Si vous ne voulez rien télécharger / installer, cela peut être fait avec Internet Explorer. Allez dans les options avancées et sélectionnez Enable FTP folder view (outside of Internet Explorer). Ensuite, vous pouvez pointer une fenêtre de l'explorateur vers votre serveur FTP et glisser-déposer des fichiers et des dossiers entre les fenêtres de l'explorateur.

Jim Fell
la source
0

Firefox a un plug-in appelé FireFtp qui est un bon client ftp.

jet
la source
0

Le répertoire cible est un fichier zip. Vous pouvez copier le fichier zip complet sur le serveur ftp en utilisant le code ci-dessous.

//Taking source and target directory path
string sourceDir = FilePath + "Files\\" + dsCustomer.Tables[0].Rows[i][2].ToString() + "\\ConfigurationFile\\" + dsSystems.Tables[0].Rows[j][0].ToString() + "\\XmlFile";

string targetDir = FilePath + "Files\\Customers\\" + CustomerName + "\\" + SystemName + "\\";                                                                                       
foreach (var srcPath in Directory.GetFiles(sourceDir))
{
    //Taking file name which is going to copy from the sourcefile                                              
    string result = System.IO.Path.GetFileName(srcPath);

    //If that filename exists in the target path
    if (File.Exists(targetDir + result))
    {
        //Copy file with a different name(appending "Con_" infront of the original filename)
        System.IO.File.Copy(srcPath, targetDir + "Con_" + result);
    }
    //If not existing filename
    else
    {
        //Just copy. Replace bit is false here. So there is no overwiting.
        File.Copy(srcPath, srcPath.Replace(sourceDir, targetDir), false);
    }
}         
user606353
la source
C'est bien, mais votre programme ne compile pas.
DavidPostill
0

Ma réponse est une variation de la réponse de @dgig.

Vous pouvez lister tous les fichiers et les enregistrer (y compris la commande put) dans un fichier:

find my-dir -exec echo "put /Users/username/"{} {} > list.txt \; 

puis utilisez sftp pour traiter le fichier:

sftp -C -b sftpbatchfile.txt name@server

-Cest pour la compression, -best pour le fichier batch

Juraj.Lorinc
la source
Cela n'utilise pas FTP comme demandé. Le sftpprogramme utilise le protocole SFTP qui est un protocole différent bien qu'il ait quelques lettres en commun. Et vous n'avez pas modifié les enter code hererestes.
dave_thompson_085