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:[email protected]

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?


źródło
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:[email protected]
Dave Cheney
źródło
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:[email protected]/mydir/
Alex Che
37

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

wget -r ftp://username:[email protected]/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.

Banee Ishaque K.
źródło
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.

zappan
źródło
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”.

chmeee
źródło
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.

AV J
źródło
2

Posługiwać się:

wget -m ftp://192.168.0.1

i będzie odzwierciedlać wszystkie pliki i foldery.

Rajat
źródło
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

maź
źródło
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ł[email protected]/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.

dr.pooter
źródło
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
kubańczyk
źródło
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:[email protected]

Aby to obejść, użyj

wget -m ftp://brinkster%2Fusername:[email protected]

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

Anto Joseph
źródło
-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.

Khushwant Singh
źródło
Ta odpowiedź na czteroletnie pytanie z wieloma pozytywnymi odpowiedziami nie oferuje niczego nowego, a nawet pomija wymóg rekurencyjnej kopii.
Sven