Preciso fazer upload de uma pasta completa usando FTP. Existe alguma opção para transferir uma pasta e todo o seu conteúdo de uma só vez?
Preciso fazer upload de uma pasta completa usando FTP. Existe alguma opção para transferir uma pasta e todo o seu conteúdo de uma só vez?
Respostas:
Se você estiver usando um cliente ftp de linha de comando padrão, o MPUT
comando permitirá transferir todos os arquivos correspondentes a um padrão (estilo shell glob), para MPUT *
enviar todos os arquivos no diretório atual. Também há MGET
para recuperar arquivos que correspondem a um padrão.
Por padrão, ambos MPUT
e MGET
solicitarão a transferência de cada arquivo antes de fazê-lo. Você provavelmente deseja desativar o prompt com o comando "PROMPT" (sem argumento; é uma alternância).
Você pode usar o ncftpput. Faça o seguinte:
Instale o ncftp:
yum install ncftp
yum é minúsculo.
Alternativamente:
apt-get install ncftp
2. Execute o seguinte comando:
ncftpput -R -v -u "ftp-username" ftp.website.com ftp-upload-path local-path/*
Use um cliente FTP como LeechFTP ou FileZilla ou algo semelhante. Muitas pessoas juram pelo CuteFTP, mas é o último shareware que verifiquei. Todos suportam a transferência de uma pasta inteira, incluindo a estrutura de diretórios.
Um tutorial simples para outros iniciantes do Windows, como eu, que acabamos aqui:
A maneira mais fácil de fazer upload de uma pasta inteira (com todas as subpastas e arquivos) é:
ncftpput -u * yourUserNameHere * -p * yourUserPasswordHere * -R * www.yourWebsite.com * / _C: \ yourFolderDirectoryHere \\ * _(como uma linha).
Observe que:
-R
é uma bandeira para "recursiva"; faz com que o comando copie todas as subpastas recursivamente/
(barra) é o diretório raiz do seu siteC:\yourFolderDirectoryHere\*
seleciona tudo dentro C:\yourFolderDirectoryHere
Oferecerei uma resposta que - embora seja pura força bruta e nem um pouco elegante - foi a única coisa que funcionou para mim na linha de comando. Criei uma lista dos arquivos e os coloquei em um script:
gere sua lista de arquivos:
find my-dir -exec echo "put /Users/username/"{} {} \;
copie e cole-os no 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
Veja isso .
Você também pode criar programaticamente uma pasta no servidor e fazer upload de todos os arquivos para essa nova pasta.
O FileZilla é ótimo para isso. Se você não deseja baixar / instalar nada, isso pode ser feito com o Internet Explorer. Vá para as opções avançadas e selecione Enable FTP folder view (outside of Internet Explorer)
. Em seguida, você pode apontar uma janela do explorer para o servidor FTP e arrastar e soltar arquivos e pastas entre as janelas do explorer.
O diretório de destino é um arquivo zip. Você pode copiar o arquivo zip completo no servidor ftp usando o código abaixo.
//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);
}
}
Minha resposta é variação da resposta de @dgig.
Você pode listar todos os arquivos e salvá-los (incluindo o comando put) em um arquivo:
find my-dir -exec echo "put /Users/username/"{} {} > list.txt \;
e use sftp para processar o arquivo:
sftp -C -b sftpbatchfile.txt name@server
-C
é para compactação, -b
é para arquivo em lote
sftp
programa usa o protocolo SFTP, que é um protocolo diferente, embora tenha algumas letras em comum. E você não editou as enter code here
sobras.