Posso carregar uma pasta inteira usando FTP?
Preciso de carregar uma pasta completa usando FTP. Existe alguma opção para transferir uma pasta e todo o seu conteúdo de uma só vez?
Preciso de carregar uma pasta completa usando FTP. Existe alguma opção para transferir uma pasta e todo o seu conteúdo de uma só vez?
Pode usar o ncftpput. Faça o seguinte:
yum é minúsculo.
Em alternativa:
apt-get install ncftp
ncftpput -R -v -u "ftp-username" ftp.website.com ftp-upload-path local-path/*
Se estiver a utilizar um cliente ftp de linha de comando padrão, o comando MPUT
permitir-lhe-á transferir todos os ficheiros que correspondam a um padrão (shell glob-style), pelo que MPUT *
enviará todos os ficheiros do directório actual. Há também MGET
para recuperar ficheiros que correspondam a um padrão.
Por defeito, tanto MPUT
como MGET
irão solicitar a transferência de cada ficheiro antes de o fazer. É provável que queira desligar a solicitação com o comando “PROMPT” (sem argumento; é uma alternância).
Utilizar um cliente FTP como LeechFTP ou FileZilla ou algo semelhante. Muitas pessoas juram por CuteFTP, mas é shareware da última vez que verifiquei. Todos apoiam a transferência de uma pasta inteira, incluindo a estrutura de directórios.
Vou oferecer uma resposta que - embora seja pura força bruta e não elegante ao mínimo - foi a única coisa que funcionou para mim na linha de comando. Criei uma lista dos ficheiros, e coloquei-os num guião:
gere a sua lista de ficheiros:
find my-dir -exec echo "put /Users/username/"{} {} \;
copiá-los e colá-los no guião:
#!/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
Um simples tutorial para outros novatos do Windows como eu que acabam aqui:
A forma mais fácil de carregar uma pasta inteira (com todas as subpastas e ficheiros nelas) é:
ncftpput -u \*yourUserNameHere\* -p \*yourUserPasswordHere\* -R \*www.yourWebsite.com\* / \_C:\yourFolderDirectoryHere\*\_
(como uma linha). Note que:
-R
é uma bandeira para “recursiva”; faz o comando copiar todas as subpastas recursivamente /
(slash) é o directório raiz do seu website C:\yourFolderDirectoryHere\*
selecciona tudo dentro C:\yourFolderDirectoryHere
.Verifique isto .
Também pode programmaticamente criar uma pasta no servidor , e depois carregar todos os ficheiros para essa nova pasta.
O dir alvo é um ficheiro zip. Pode copiar o ficheiro zip completo para o 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);
}
}
FileZilla é óptimo para isto. Se não quiser descarregar/instalar nada, isto pode ser feito com o Internet Explorer. Vá para as opções avançadas, e seleccione Enable FTP folder view (outside of Internet Explorer)
. Depois pode apontar uma janela do explorer para o seu servidor FTP e arrastar e largar ficheiros e pastas entre janelas do explorer.
A minha resposta é uma variação da resposta de @dgig ‘s.
Pode listar todos os ficheiros e guardá-los (incluindo o comando put) num ficheiro:
find my-dir -exec echo "put /Users/username/"{} {} > list.txt \;
e depois utilizar sftp para processar o ficheiro:
sftp -C -b sftpbatchfile.txt name@server
-C
é para compressão, -b
é para ficheiro batch