¿Puedo subir una carpeta entera mediante FTP?
Necesito subir una carpeta completa mediante FTP. ¿Hay alguna opción para transferir una carpeta y todo su contenido a la vez?
Necesito subir una carpeta completa mediante FTP. ¿Hay alguna opción para transferir una carpeta y todo su contenido a la vez?
Puede utilizar ncftpput. Haga lo siguiente:
yum está en minúsculas.
Alternativamente:
apt-get install ncftp
ncftpput -R -v -u "ftp-username" ftp.website.com ftp-upload-path local-path/*
Si está utilizando un cliente ftp de línea de comandos estándar, el comando MPUT
le permitirá transferir todos los archivos que coincidan con un patrón (de estilo glob de la shell), por lo que MPUT *
enviará todos los archivos del directorio actual. También existe MGET
para recuperar los archivos que coincidan con un patrón.
Por defecto, tanto MPUT
como MGET
preguntarán si se debe transferir cada fichero antes de hacerlo. Probablemente quiera desactivar la pregunta con el comando “PROMPT” (sin argumento; es un conmutador).
Usa un cliente FTP como LeechFTP o FileZilla o algo similar. Mucha gente jura por CuteFTP, pero es shareware la última vez que lo comprobé. Todos soportan la transferencia de una carpeta completa, incluyendo la estructura de directorios.
Voy a ofrecer una respuesta que -aunque es pura fuerza bruta y no es elegante en lo más mínimo- fue lo único que me funcionó en la línea de comandos. Creé una lista de los archivos, y los puse en un script:
generar su lista de archivos:
find my-dir -exec echo "put /Users/username/"{} {} \;
copiarlos y pegarlos 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
Un sencillo tutorial para otros novatos de Windows como yo que acaben aquí:
La forma más sencilla de subir una carpeta entera (con todas las subcarpetas y archivos que contenga) es:
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 recursivamente /
(barra) es el directorio raíz de su sitio web C:\yourFolderDirectoryHere\*
selecciona todo lo que está dentro de C:\yourFolderDirectoryHere
Compruebe esto .
También puede crear mediante programación una carpeta en el servidor , y luego subir todos los archivos a esa nueva carpeta.
El dir de destino es un archivo zip. Puede copiar el archivo zip completo en el servidor ftp utilizando 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);
}
}
FileZilla es genial para esto. Si no quieres descargar/instalar nada, esto se puede hacer con Internet Explorer. Ve a las opciones avanzadas y selecciona Enable FTP folder view (outside of Internet Explorer)
. Entonces puedes apuntar una ventana del explorador a tu servidor FTP y arrastrar y soltar archivos y carpetas entre las ventanas del explorador.
Mi respuesta es una variación de la respuesta de @dgig.
Puedes listar todos los archivos y guardarlos (incluyendo el comando put) en un archivo:
find my-dir -exec echo "put /Users/username/"{} {} > list.txt \;
y luego usar sftp para procesar el archivo:
sftp -C -b sftpbatchfile.txt name@server
-C
es para la compresión, -b
es para el archivo por lotes