Jak rekurencyjnie pobrać folder przez FTP na Linux [zamknięty]

325

Próbuję pobrać folder ftp za pomocą klienta ftp z wiersza poleceń, ale do tej pory mogłem używać tylko polecenia „get”, aby uzyskać pojedyncze pliki.

Charles Ma
źródło
5
prawidłowa odpowiedź pochodzi z 6 kwietnia 11 14:13 przez lkuty. Nie używaj mget, to wcale nie jest rekurencyjne. odpowiedź z 22 września 08 o 9:01 Thibaut Barrère jest łatwiejszy do zrozumienia, ale musi dodać opcję, -l 0jak wspomniano w komentarzach
chriscatfr z

Odpowiedzi:

634

Możesz polegać na wget, który zwykle odpowiednio obsługuje ftp (przynajmniej z własnego doświadczenia). Na przykład:

wget -r ftp://user:[email protected]/

Możesz także użyć -modpowiedniego do tworzenia kopii lustrzanych. Obecnie jest to równoważne z-r -N -l inf .

Jeśli masz jakieś znaki specjalne w szczegółach poświadczeń, możesz podać argumenty --useri --passwordargumenty, aby to zadziałało. Przykład niestandardowego logowania z określonymi znakami:

wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/

EDYCJA Jak wskazał @asmaier, uważaj, że nawet jeśli -rdotyczy rekurencji, ma domyślny maksymalny poziom 5:

       -r
       --recursive
           Turn on recursive retrieving.

       -l depth
       --level=depth
           Specify recursion maximum depth level depth.  The default maximum depth is 5.

Jeśli nie chcesz przegapić podkatalogów, lepiej skorzystaj z opcji dublowania -m:

       -m
       --mirror
           Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets infinite
           recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l inf
           --no-remove-listing.
Thibaut Barrère
źródło
121
Lepsze wykorzystanie wget -m( --mirror). wget -rdomyślnie jest ograniczona do głębokości rekurencji wynoszącej 5.
asmaier,
13
Musiałem użyć --useri --passwordna Red Hat. Mój wget brzmi: GNU Wget 1.11.4 Red Hat modifiedzastanawiam się, czy to jest wersja, czy dystrybucja ...
devin
61
Możesz ustawić nieskończony poziom rekurencji za pomocą -l 0, więc nie ma potrzeby używania tego, --mirrorco może mieć niepożądane skutki uboczne, takie jak pliki .listing
Hnatt
28
Używam wget --ask-password -rl 99 ftp://[email protected]. W ten sposób hasło nie jest widoczne psi nie pozostaje w historii. Oczywiście z natury ftp jest wysyłany niezaszyfrowany na serwer.
Walter Tross,
7
Przypomnienie o bash newbs: będziesz musiał użyć pojedynczych cudzysłowów, jeśli nazwa użytkownika lub hasło mają znaki kontrolne (jak $), np.--user='user' --password='pa$$word'
tobek
164

Tylko w celu uzupełnienia odpowiedzi udzielonej przez Thibaut Barrère.

użyłem

wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory

Zwróć uwagę na podwójny ukośnik po nazwie serwera. Jeśli nie wstawię dodatkowego ukośnika, ścieżka jest względna do katalogu domowego użytkownika.

  • -nH unika tworzenia katalogu nazwanego po nazwie serwera
  • -nc unika tworzenia nowego pliku, jeśli już istnieje w miejscu docelowym (jest tylko pomijany)
  • --cut-dirs = 5 pozwala mi pobrać zawartość katalogu / absolutnego / ścieżki / do / i umieścić ją w katalogu, w którym uruchamiam wget. Liczba 5 służy do odfiltrowania 5 składników ścieżki. Podwójny ukośnik oznacza dodatkowy element.
Ludovic Kuty
źródło
3
Znakomity. Możliwość pomijania już istniejących plików jest świetna do nadrobienia zaległości w najnowszych dodatkach do migracji serwera. rsync jest bardziej wydajny i elastyczny, ale czasami ta opcja jest po prostu niedostępna i można używać tylko FTP.
Jason
Ładne parametry, szczególnie -nc i --cut-dirs. Dzięki za udostępnienie!
Lance Cleveland
2
Nie zawsze ufam „pomijaniu istniejących plików”, ponieważ jeden z nich może być niekompletny lub mieć inny rozmiar i zawartość, ale dobrze, że wspomniał o tej opcji
Daniel W.,
Nawet dzisiaj nadal używam tego polecenia wget, gdy nie mogę użyć rsync. -Nc i --cut-dirs są bardzo przydatne!
Połowa szaleństwa
4
Niesamowite! A jeśli nie chcesz umieszczać hasła w wierszu poleceń, możesz użyć --ftp-user=USERi --ask-password.
shoover
25
ncftp -u <user> -p <pass> <server>
ncftp> mget directory
Vinko Vrsalovic
źródło
Nie mogłem zalogować się do serwera FTP przy użyciu parametrów, ale używając struktury open ftp://USERNAME:PASSWORD@HOSTpo uruchomieniu ncftp…
opłata
+1 - Wiem, że ten post jest stary, ale właśnie go natknąłem i ncftp był naprawdę łatwy w użyciu. Użyłem -R do rekurencyjnego uzyskiwania z ncftpget
Zack Macomber
zdecydowanie bardziej niezawodny wgeti szybszy również w trybie TAR. Dzięki!
lencinhaus
3
To nie działa, jak stwierdzono w Ubuntu 14.04. Pracowała dla mnie składnia „get -R directory” zamiast mget.
Ivan
Pracował dla mnie na Ubuntu 14.04. Nie musiałem się martwić, że to wszystko właśnie tam było.
ashley,
22

Jeśli lftpjest zainstalowany na twoim komputerze, użyj mirror dir. I gotowe. Zobacz komentarz Ciro poniżej, jeśli chcesz rekurencyjnie pobrać katalog.

Dilawar
źródło
7
btw, mirror -R dirczy rekursywne przesyłanie / aktualizacja katalogu
Ciro Santilli 13 冠状 病 六四 事件 法轮功
1
Można również użyć mirror ./do pobrania wszystkich plików i folderów rekurencyjnie w bieżącej ścieżce.
Nabi KAZ
Możesz także po prostu wpisać mirror, dla bieżącego katalogu i jego podfolderów.
Michael
17

Jeśli możesz użyć scpzamiast ftp, -ropcja zrobi to za Ciebie. Sprawdziłbym, czy możesz użyć bardziej nowoczesnego mechanizmu przesyłania plików niż FTP.

Greg Hewgill
źródło
2
Głosowałem za tym, ponieważ była to dokładnie moja pierwsza myśl, mimo że nie odpowiada ona dokładnie takim pytaniem, jakie jest.
metao
Który z nich proponuje @ greg-hewgill? Mam podobny problem
Michał Gonda,
1
scpnadal będzie próbował użyć ssh, co nie będzie działać, jeśli masz tylko poświadczenia FTP. Czuje się dziwnie reaguje na komentarz z 2008 roku mówią technologię utknąłem ze nie jest nowoczesny :( Dobry stary 2008, zwróciłem się w dniu 18 ty pisał komentarz.
aexl
7

Istnieje „ncftp”, który można zainstalować w systemie Linux. Działa na protokole FTP i może służyć do rekurencyjnego pobierania plików i folderów. działa na systemie Linux. Został użyty i działa dobrze w przypadku rekurencyjnego przesyłania folderów / plików.

Sprawdź ten link ... http://www.ncftp.com/

Szyfrować
źródło
2
ncftp działa również na Windowsie
Ilya
Kocham ncftp! Dziękuję Ci.
jocull
3

Jeśli możesz, zdecydowanie zalecam ci tari bzip(lub gzipcokolwiek, co płynie twoją łodzią) katalog na zdalnej maszynie - w przypadku katalogu o znacznych rozmiarach, oszczędność przepustowości prawdopodobnie będzie warta czasu na skompresowanie / rozpakowanie.

Hank Gay
źródło
Może w 2008 roku, ale w 2013 roku przepustowość nie ma już znaczenia i możesz mieć FTP, ale nie dostęp do konsoli :-)
Daniel W.
3

Jeśli chcesz trzymać się wiersza poleceń FTP, powinieneś wypróbować NcFTP. Następnie możesz użyć polecenia get -R, aby rekurencyjnie uzyskać folder. Otrzymasz również ukończenie.

Jazz
źródło
3

wget -r ftp://url

Działa idealnie dla Redhat i Ubuntu

Phillip
źródło
1

Nie powinieneś używać ftp. Jakby telnetnie korzystał z bezpiecznych protokołów, a hasła są przesyłane czystym tekstem. Dzięki temu osoby trzecie mogą bardzo łatwo przechwycić nazwę użytkownika i hasło.

Aby skopiować zdalne katalogi zdalnie, te opcje są lepsze:

  • rsyncjest najlepszym narzędziem, jeśli można się zalogować ssh, ponieważ kopiuje tylko różnice i może łatwo zrestartować się w środku w przypadku zerwania połączenia.

  • ssh -r jest drugą najlepszą opcją do rekurencyjnego kopiowania struktur katalogów.

Widzieć:

Tilo
źródło
niezabezpieczone, tylko ftp
JosFabre 25.09.15
jest 2015. FTP nie powinien być używany.
Tilo
1
Zgadzam się. Zawsze należy podawać sugestie dotyczące lepszego bezpieczeństwa. Pytanie dotyczyło FTP, więc powiedzenie, że nie należy go używać, nie pomaga
JosFabre,
Z szacunkiem się nie zgadzam. Używają niewłaściwego narzędzia do pracy. Powinni nauczyć się korzystać z bezpiecznych i aktualnych narzędzi zamiast ftp z lat 80. Mówiąc dokładniej, nikt nie powinien już uruchamiać serwera ftp: P
Tilo
4
Przepraszam, ale w zeszłym tygodniu miałem dostęp do serwera, który miał tylko połączenie FTP. Moim zadaniem było przenieść z dala od niego.
Antti Haapala,
-6

przełączać monit za pomocą polecenia PROMPT.

Stosowanie:

ftp>cd /to/directory    
ftp>prompt    
ftp>mget  *
Rohit
źródło
8
Głosowanie w dół0: mget nie jest rekurencyjny.
Lance Cleveland