Posso carregar uma pasta inteira usando FTP?


29

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:


24

Se você estiver usando um cliente ftp de linha de comando padrão, o MPUTcomando 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á MGETpara recuperar arquivos que correspondem a um padrão.

Por padrão, ambos MPUTe MGETsolicitarã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).


Essa pergunta veio originalmente do stackoverflow, então acho que deve ser a resposta aceita. Embora o autor da questão original parece ter desaparecido por isso não vai aceitar um ....
codetaku

Aviso: o cliente de linha de comando FTP que acompanha o Windows não suporta o modo passivo, portanto, usar esta técnica pode desperdiçar seu tempo. Isso aconteceu no meu caso, pois eu precisava fazer upload de arquivos e estava usando a linha de comando do Windows com ferramentas instaladas nativamente.
precisa saber é o seguinte

1
Ele transferirá todos os arquivos simples no diretório atual, mas não transferirá recursivamente os diretórios presentes. Apenas os ignorará silenciosamente
bergercookie 15/02

22

Você pode usar o ncftpput. Faça o seguinte:

  1. 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/*

O Yum deve ser alterado para yum - pois diferencia maiúsculas de minúsculas.
Olakeh 26/10

1
Aqui estão todas as opções de CLI para ncftpput: ncftp.com/ncftp/doc/ncftpput.html
Pepijn Olivier



2

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) é:

  1. Faça o download do NcFTP Client (é grátis, mas você pode doar) neste link .
  2. Escolha NcFTP Client 3.2.5 para Microsoft Windows na lista.
  3. Instale-o.
  4. Quando terminar, uma pequena janela CMD com um ícone de cerejas será exibida. Você não precisa disso.
  5. Basta abrir uma janela CMD padrão e digite:
    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 site
  • C:\yourFolderDirectoryHere\* seleciona tudo dentro C:\yourFolderDirectoryHere

parece bom, mas o servidor baniu meu IP dizendo que eu fiz 800 conexões em um curto intervalo. não há como reduzir o número de conexões. Outro problema é que eu não sei pular o upload se o arquivo de destino já existir.
16851556 21/10

2

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


0

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.


0

O Firefox possui um plug-in chamado FireFtp, que é um ótimo cliente de FTP.


0

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

Isso é legal, mas seu programa não é compilado.
DavidPostill

0

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


Isso não usa o FTP conforme solicitado. O sftpprograma usa o protocolo SFTP, que é um protocolo diferente, embora tenha algumas letras em comum. E você não editou as enter code heresobras.
David_thompson_085
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.