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.