Używanie wget do rekurencyjnego pobierania całych katalogów FTP


93

Chcę skopiować wszystkie pliki i foldery z jednego hosta na inny. Pliki na starym hoście znajdują się w / var / www / html i mam tylko dostęp FTP do tego serwera i nie mogę TARować wszystkich plików. Regularne połączenie ze starym hostem przez FTP prowadzi mnie do folderu / home / admin.

Próbowałem uruchomić następujące polecenie z mojego nowego serwera:

wget -r ftp://username:password@ip.of.old.host

Ale wszystko, co otrzymuję, to złożony plik index.html.

Jaka jest właściwa składnia do rekurencyjnego używania wget przez FTP?


2
Zauważ, że domyślnie wget -r ma maksymalną głębokość rekurencji 5; jeśli masz głębsze podkatalogi, zostaną one zignorowane, chyba że to zmienisz (patrz -l na stronie podręcznika).
— mikewaters

Odpowiedzi:


125

Spróbuj -mna--mirror

wget -m ftp://username:password@ip.of.old.host

15
Ze względów bezpieczeństwa dobrze byłoby użyć, --ask-passwordaby uniknąć przechowywania hasła history.
— suma kontrolna

To jest takie fajne. Działało jak urok ..
— Sambhav Sharma

To powinna być zaakceptowana odpowiedź (dla lepszej widoczności).
— bgondy

nie zawiera ścieżki katalogu do pobrania, myślę, że odpowiedź @Formoda jest lepsza
— Wasim A.

@WasimA., Możesz również tutaj dodać ścieżkę katalogu:wget -m ftp://username:password@ip.of.old.host/mydir/
— Alex Che

37

Masz rację, po prostu potrzebujesz końca *:

wget -r ftp://username:password@1.2.3.4/dir/*

W przypadku serwerów współdzielonych możesz użyć tego w następujący sposób:

wget -r ftp://1.2.3.4/dir/* --ftp-user=username --ftp-password=password

Ponieważ większość współdzielonych serwerów ma ftp-username coś takiego jak nazwa użytkownika @ nazwa hosta, więc pierwsze polecenie wget nie działa, a drugie polecenie działa dobrze.


1
Przejdzie to tylko do jednego katalogu głęboko. Lepiej użyć flagi -m
— SvennD,

w niektórych przypadkach drugie polecenie nie działa z powodu miejsca, możesz użyć pierwszego polecenia do udostępniania hostingu w ten sposób. ** wget -r ftp: / / nazwa użytkownika% 40host: hasło @ host / katalog / **
— Wasim A.

Uwaga: powinieneś użyć albo, -malbo -r -l infponieważ -r ma domyślną głębokość rekurencji wynoszącą 5. Zobacz gnu.org/software/wget/manual/…
— ndemou 10.10.17

7

Oprócz wget, możesz także używać lftp w trybie skryptowym. Poniższa komenda utworzy kopię lustrzaną zawartości danego zdalnego katalogu FTP w danym katalogu lokalnym i może zostać umieszczona w zadaniu cron:

lftp -c 'open <hostname>; user <username> <password>; mirror -e <remote-src-path> <local-dest-path>; quit'

Automatycznie obsługuje rekurencję do katalogów i umożliwia określenie zdalnego katalogu źródłowego, z którego można pobierać dane.


5

Możesz użyć „curlftpfs - zamontuj host ftp jako katalog lokalny”, a po zamontowaniu możesz użyć zwykłych narzędzi do plików, takich jak „cp -r”.


curlftpfsma teraz poważne problemy z wydajnością, chyba że libcurl3-gnutls
— obniżysz

5

Sprawdź poniższe polecenie wget, aby rekurencyjnie pobierać dane z FTP.

wget --user="<user-name>" --password="<password>" -r -np -nH --cut-dirs=1 --reject "index.html*" "<URL to download files>"

-r: Do rekurencyjnego pobrania.

-np: Nie dla rodzica wstępującego.

-nH: Służy do wyłączenia tworzenia katalogu o nazwie takiej samej jak URL, tj. Abc.xyz.com

--cut-dirs: Służy do ignorowania liczby katalogów nadrzędnych. Wartość tej opcji będzie się różnić dla twojego polecenia.

Możesz to sprawdzić, wykonując powyższe polecenie.



2

Powinien działać spróbuj:

wget -r ftp://ftp:ftp@ftp.sunet.se/tst/

2

Posługiwać się:

wget -m ftp://192.168.0.1

i będzie odzwierciedlać wszystkie pliki i foldery.


Jak powiedziałem, logowanie przez FTP przenosi mnie do folderu / home / admin, a potrzebne mi pliki znajdują się w / var / www / html. Kiedy uruchamiam polecenie, które zasugerowałeś, otrzymuję tylko zawartość / home / admin Próbowałem uruchomić go z 192.168.0.1/var/www/html , ale potem próbuje CWD / home / admin / var / www / html. Jak zmusić go do przejścia do tego folderu z katalogu głównego?

Nie mam doświadczenia z tym konkretnym problemem, ale możesz spróbować utworzyć dowiązanie symboliczne do / var / www / html w swoim domu. Następnie możesz użyć adresu takiego jak 192.168.0.1/html
— prestomation

Próbowałem utworzyć dowiązanie symboliczne, ale to spowodowało, że wget utworzył podobne dowiązanie symboliczne na moim lokalnym.

1

To jest właściwa składnia. Nie wiesz, dlaczego nie uzyskujesz oczekiwanych rezultatów.

Jak zawsze jest na to więcej niż jeden sposób. Wypróbuj ncftp, w szczególności ncftpget


Nie mogę zainstalować więcej oprogramowania na nowym serwerze. Czy nie powinienem mówić wgetowi, aby pobierał wszystkie pliki z / var / www / html? Próbowałem wget -r nazwa_użytkownika: hasło@ip.of.old.host/var/www/html, ale dostałem błąd nie znaleziono katalogu.

1

Rozumiem, jeśli próbujesz zrzucić to do crona lub czegoś takiego, ale dlaczego po prostu nie ftp na serwer z normalnym klientem i mget *? To może być szybsza ścieżka do sukcesu.


Próbowałem mget *, ale nie działało to z podfolderami, mówiąc, że lokalny podfolder nie istnieje. Czy istnieje sposób, aby zmusić go do automatycznego tworzenia folderów lokalnych?

W zależności od klienta przełącznik -r zwykle działa. IE: mget -r *
— dr.pooter

mmm. Standardowy klient ftp AFAIK w systemie Linux nie jest przeznaczony do rekurencyjnego pobierania katalogów. Mam na myśli - nie ma opcji -r. inni klienci, tacy jak ncftp lub lftp, obsługują pobieranie rekurencyjne, ale zazwyczaj nie są domyślnie dostępne.
— Stann

1

Jak powiedziałem, logowanie przez FTP przenosi mnie do folderu / home / admin, a pliki, których potrzebuję, znajdują się w / var / www / html

Myślę, że to zadziała w twoim przypadku:

wget -r ftp://192.168.0.1/../../var/www/html

0

Natknąłem się na hosting Windowsa z nazwą użytkownika jako brinkster / nazwa użytkownika, więc wget rzuci błąd, jeśli użyjesz składni:

wget -m ftp://brinkster/username:password@ip.of.the.host

Aby to obejść, użyj

wget -m ftp://brinkster%2Fusername:password@ip.of.old.host

Musiałem stawić temu czoła z Windows hosting @ brinkster.


-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename wykona zadanie lub możesz dodać * zamiast nazw plików: powoduje, że wget myśli o porcie, który jest niepoprawny w twoim przypadku.


Ta odpowiedź na czteroletnie pytanie z wieloma pozytywnymi odpowiedziami nie oferuje niczego nowego, a nawet pomija wymóg rekurencyjnej kopii.
— Sven
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.