¿Puedo cargar una carpeta completa usando FTP?


29

Necesito cargar una carpeta completa usando FTP. ¿Hay alguna opción para transferir una carpeta y todo su contenido a la vez?

Respuestas:


24

Si está utilizando un cliente ftp de línea de comando estándar, el MPUTcomando le permitirá transferir todos los archivos que coincidan con un patrón (estilo glob de shell), por MPUT *lo que enviará todos los archivos en el directorio actual. También hay MGETque recuperar archivos que coincidan con un patrón.

Por defecto, MPUTy MGETle pedirá si se debe transferir cada archivo antes de hacerlo. Probablemente desee desactivar la solicitud con el comando "PROMPT" (sin argumento; es una palanca).


Esta pregunta vino originalmente de stackoverflow, por lo que creo que debería ser la respuesta aceptada. Aunque el autor de la pregunta original parece haberse desvanecido, no va a aceptar uno ... ''
Codetaku

Advertencia: el cliente de línea de comandos FTP que viene con Windows no admite el modo pasivo, por lo que usar esta técnica puede hacer que pierda su tiempo. Lo hizo en mi caso ya que necesitaba cargar archivos y estaba usando la línea de comandos de Windows con herramientas instaladas de forma nativa.
sean2078

1
Transferirá todos los archivos sin formato en el directorio actual, pero no transferirá recursivamente ningún directorio que esté presente. Simplemente los ignorará en silencio
bergercookie

22

Puedes usar ncftpput. Haz lo siguiente:

  1. Instalar ncftp:

    yum install ncftp
    

ñam es minúscula.

Alternativamente:

    apt-get install ncftp

2. Ejecute el siguiente comando:

    ncftpput -R -v -u "ftp-username" ftp.website.com ftp-upload-path local-path/*

El Yum debe cambiarse a yum, ya que distingue entre mayúsculas y minúsculas.
olekeh

1
Aquí están todas las opciones de CLI para ncftpput: ncftp.com/ncftp/doc/ncftpput.html
Pepijn Olivier



2

Un tutorial simple para otros novatos de Windows como yo que terminan aquí:

La forma más fácil de cargar una carpeta completa (con todas las subcarpetas y archivos en ellas) es:

  1. Descargue NcFTP Client (es gratis, pero puede donar) desde este enlace .
  2. Elija NcFTP Client 3.2.5 para Microsoft Windows de la lista.
  3. Instalarlo.
  4. Cuando termine, aparecerá una pequeña ventana CMD con un icono de cerezas. No lo necesitas
  5. Simplemente abra una ventana CMD estándar y escriba:
    ncftpput -u * yourUserNameHere * -p * yourUserPasswordHere * -R * www.yourWebsite.com * /
                     _C: \ yourFolderDirectoryHere \\ * _
    (como una línea)

Tenga en cuenta que:

  • -R es una bandera para "recursivo"; hace que el comando copie todas las subcarpetas de forma recursiva
  • / (barra oblicua) es el directorio raíz de su sitio web
  • C:\yourFolderDirectoryHere\* selecciona todo dentro C:\yourFolderDirectoryHere

se ve bien, pero el servidor prohibió mi IP diciendo que hice 800 conexiones en un corto intervalo. No hay forma de reducir el número de conexiones. OTRO problema es que no sé cómo omitir la carga si el archivo de destino ya existe.
16851556

2

Ofreceré una respuesta que, aunque es pura fuerza bruta y no elegante en lo más mínimo, fue lo único que funcionó para mí en la línea de comando. Creé una lista de los archivos y los puse en un script:

genera tu lista de archivos:

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

cópielos y péguelos en el 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


0

FileZilla es genial para esto. Si no desea descargar / instalar nada, esto se puede hacer con Internet Explorer. Vaya a las opciones avanzadas y seleccione Enable FTP folder view (outside of Internet Explorer). Luego puede apuntar una ventana del explorador a su servidor FTP y arrastrar y soltar archivos y carpetas entre las ventanas del explorador.



0

El directorio de destino es un archivo zip. Puede copiar el archivo zip completo en el servidor ftp usando el siguiente código.

//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);
    }
}         

Eso es bueno, pero su programa no se compila.
DavidPostill

0

Mi respuesta es una variación de la respuesta de @dgig.

Puede enumerar todos los archivos y guardarlos (incluido el comando poner) en un archivo:

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

y luego use sftp para procesar el archivo:

sftp -C -b sftpbatchfile.txt name@server

-Ces para compresión, -bes para archivo por lotes


Esto no usa FTP como se le solicitó. El sftpprograma utiliza el protocolo SFTP, que es un protocolo diferente, aunque tiene algunas letras en común. Y no editaste las enter code heresobras.
dave_thompson_085
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.