J'ai besoin de télécharger un dossier complet en utilisant FTP. Existe-t-il une option pour transférer un dossier et tout son contenu à la fois?
Si vous utilisez un client ftp standard en ligne de commande, la commande MPUT
vous permettra de transférer tous les fichiers correspondant à un modèle (style global Shell), de sorte que MPUT *
enverra tous les fichiers du répertoire en cours. Il existe également MGET
pour récupérer les fichiers correspondant à un modèle.
Par défaut, MPUT
et MGET
demanderont le transfert de chaque fichier avant de le faire. Vous voudrez probablement désactiver les invites avec la commande "Invite" (sans argument, c'est une bascule).
Vous pouvez utiliser ncftpput. Faites ce qui suit:
Installez ncftp:
yum install ncftp
miam est en minuscule.
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/*
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 la dernière fois que j'ai vérifié les partagiciels. Tous prennent en charge le transfert d'un dossier complet, y compris la structure de répertoires.
Un tutoriel simple pour les débutants Windows comme moi qui se retrouvent ici:
Le moyen le plus simple de télécharger un dossier complet (avec tous les sous-dossiers et les fichiers qu’ils contiennent) est:
ncftpput -u * yourUserNameHere * -p * yourUserPasswordHere * -R * www.votreWebsite.com * / _C:\yourFolderDirectoryHere \\ * _(sur une ligne).
Notez que:
-R
est un drapeau pour "récursif"; la commande copie tous les sous-dossiers de manière récursive/
(barre oblique) est le répertoire racine de votre site WebC:\yourFolderDirectoryHere\*
sélectionne tout ce qui se trouve à l'intérieur C:\yourFolderDirectoryHere
Je vais offrir une réponse qui - bien que pure force brute et pas du tout élégante - a été la seule chose qui a fonctionné pour moi sur la ligne de commande. J'ai créé une liste de fichiers et les ai mis dans un script:
générer votre liste de fichiers:
find my-dir -exec echo "put /Users/username/"{} {} \;
copiez 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
Vérifiez ceci .
Vous pouvez également créer par programme un dossier sur le serveur , puis télécharger tous les fichiers dans ce nouveau dossier.
FileZilla est idéal pour cela. Si vous ne souhaitez rien télécharger/installer, vous pouvez le faire avec Internet Explorer. Allez dans les options avancées et sélectionnez Enable FTP folder view (outside of Internet Explorer)
. Vous pouvez ensuite pointer une fenêtre de l’explorateur sur votre serveur FTP et faire glisser des fichiers et des dossiers entre les fenêtres de l’explorateur.
Firefox a un plug-in appelé FireFtp qui est un client ftp de Nice.
Ma réponse est une variation de la réponse de @dgig.
Vous pouvez lister tous les fichiers et les sauvegarder (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
-C
est pour la compression, -b
est pour le fichier de commandes
Le répertoire cible est un fichier Zip. Vous pouvez copier le fichier Zip complet sur le serveur FTP à l'aide du 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);
}
}