Czy mogę przesłać cały folder za pomocą FTP?


29

Muszę przesłać pełny folder za pomocą FTP. Czy jest jakaś opcja przeniesienia folderu i całej jego zawartości na raz?

Odpowiedzi:


24

Jeśli używasz standardowego klienta ftp z MPUTwiersza poleceń , polecenie pozwoli ci przesłać wszystkie pliki pasujące do wzorca (powłoki glob-style), więc MPUT *wyśle ​​wszystkie pliki w bieżącym katalogu. Istnieje również MGETmożliwość pobrania plików pasujących do wzorca.

Domyślnie zarówno MPUTi MGETpytają, czy przesłać każdy plik przed zrobieniem tego. Prawdopodobnie zechcesz wyłączyć wyświetlanie monitów za pomocą polecenia „PROMPT” (bez argumentu; jest to przełączanie).


To pytanie pierwotnie pochodzi z przepełnienia stosu, więc uważam, że powinna to być zaakceptowana odpowiedź. Chociaż wydaje się, że pierwotny
pytający

Ostrzeżenie: klient wiersza poleceń FTP dostarczany z systemem Windows nie obsługuje trybu pasywnego, więc użycie tej techniki może zmarnować Twój czas. Tak było w moim przypadku, ponieważ musiałem przesyłać pliki i korzystałem z wiersza polecenia systemu Windows z natywnie zainstalowanym oprzyrządowaniem.
sean2078

1
Prześle wszystkie zwykłe pliki z bieżącego katalogu, ale nie przeniesie rekurencyjnie żadnych obecnych katalogów. Po prostu je zignoruje
bergercookie

22

Możesz użyć ncftpput. Wykonaj następujące czynności:

  1. Zainstaluj ncftp:

    yum install ncftp
    

mniam jest małymi literami.

Alternatywnie:

    apt-get install ncftp

2. Wykonaj następujące polecenie:

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

Yum należy zmienić na yum - z uwagi na wielkość liter.
olekeh

1
Oto wszystkie opcje CLI dla ncftpput: ncftp.com/ncftp/doc/ncftpput.html
Pepijn Olivier



2

Prosty samouczek dla innych początkujących użytkowników systemu Windows, takich jak ja, którzy trafiają tutaj:

Najłatwiejszym sposobem przesłania całego folderu (ze wszystkimi podfolderami i plikami) jest:

  1. Pobierz klienta NcFTP (to nic nie kosztuje, ale możesz przekazać darowiznę) z tego linku .
  2. Wybierz z listy klienta NcFTP 3.2.5 dla Microsoft Windows .
  3. Zainstaluj to.
  4. Po zakończeniu pojawi się małe okno CMD z ikoną wiśni. Nie potrzebujesz tego.
  5. Wystarczy otworzyć standardowe okno CMD i wpisać:
    ncftpput -u * twojaUserNameHere * -p * twojeUserPasswordHere * -R * www.yourWebsite.com * /
                     _C: \ yourFolderDirectoryHere \\ * _
    (jako jedna linia).

Uwaga:

  • -R jest flagą słowa „rekurencyjny”; powoduje, że polecenie kopiuje rekursywnie wszystkie podfoldery
  • / (ukośnik) to katalog główny Twojej witryny
  • C:\yourFolderDirectoryHere\* zaznacza wszystko w środku C:\yourFolderDirectoryHere

wygląda ładnie, ale serwer zablokował mój adres IP, mówiąc, że wykonałem 800 połączeń w krótkim odstępie czasu. nie ma sposobu na zmniejszenie liczby połączeń. INNY problem polega na tym, że nie wiem, jak pominąć przesyłanie, jeśli plik docelowy już istnieje.
16851556

2

Dam ci odpowiedź, która - choć jest to czysta brutalna siła i w najmniejszym stopniu elegancka - była jedyną rzeczą, która działała dla mnie w linii poleceń. Utworzyłem listę plików i umieściłem je w skrypcie:

wygeneruj listę plików:

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

skopiuj i wklej je do skryptu:

#!/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 jest do tego świetna. Jeśli nie chcesz niczego pobierać / instalować, możesz to zrobić za pomocą Internet Explorera. Przejdź do opcji zaawansowanych i wybierz Enable FTP folder view (outside of Internet Explorer). Następnie możesz skierować okno eksploratora na serwer FTP i przeciągać i upuszczać pliki oraz foldery między oknami eksploratora.



0

Docelowy katalog to plik zip. Możesz skopiować pełny plik zip na serwer ftp, używając poniższego kodu.

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

To miłe, ale twój program się nie kompiluje.
DavidPostill

0

Moja odpowiedź jest odmianą odpowiedzi @dgig.

Możesz wyświetlić listę wszystkich plików i zapisać je (w tym polecenie put) w pliku:

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

a następnie użyj sftp do przetworzenia pliku:

sftp -C -b sftpbatchfile.txt name@server

-Csłuży do kompresji, -bsłuży do pliku wsadowego


Nie używa FTP zgodnie z zapytaniem. sftpProgram korzysta z protokołu SFTP, który jest inny protokół choć ma kilka listów wspólnego. I nie edytowałeś enter code hereresztek.
dave_thompson_085
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.