Sử dụng wget để tải xuống đệ quy toàn bộ thư mục FTP


93

Tôi muốn sao chép tất cả các tệp và thư mục từ máy chủ này sang máy chủ khác. Các tệp trên máy chủ cũ nằm ở / var / www / html và tôi chỉ có quyền truy cập FTP vào máy chủ đó và tôi không thể TAR tất cả các tệp. Kết nối thường xuyên với máy chủ cũ thông qua FTP đưa tôi đến thư mục / home / admin.

Tôi đã thử chạy lệnh sau đây từ máy chủ mới của tôi:

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

Nhưng tất cả những gì tôi nhận được là một tệp index.html được tạo thành.

Cú pháp đúng để sử dụng wget đệ quy qua FTP là gì?


2
Lưu ý rằng, theo mặc định, wget -r có độ sâu đệ quy tối đa là 5; nếu bạn có thư mục con sâu hơn, chúng sẽ bị bỏ qua trừ khi bạn thay đổi điều này (xem -l trong trang man).
mikewaters

Câu trả lời:


125

Cố gắng -mcho--mirror

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

15
Vì lý do bảo mật, sẽ tốt hơn nếu sử dụng --ask-passwordđể tránh mật khẩu được lưu giữ history.
tổng kiểm tra

Điều này thật tuyệt Làm việc như một bùa mê ..
Sambhav Sharma

Đây phải là câu trả lời được chấp nhận (để nhìn rõ hơn).
bgondy

Nó không bao gồm đường dẫn của thư mục để tải xuống, tôi đoán câu trả lời @Formoda tốt hơn
Wasim A.

@WasimA., Bạn cũng có thể thêm đường dẫn thư mục vào đây:wget -m ftp://username:password@ip.of.old.host/mydir/
Alex Che

37

Bạn có quyền, bạn chỉ cần một dấu * ở cuối:

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

Đối với các máy chủ được chia sẻ, bạn có thể sử dụng như thế này:

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

Bởi vì hầu hết các máy chủ được chia sẻ có tên người dùng ftp giống như tên người dùng @ tên máy chủ, vì vậy, lệnh wget đầu tiên không hoạt động và lệnh thứ hai hoạt động tốt.


1
Điều này sẽ chỉ đi sâu vào một thư mục. Sử dụng cờ -m
SvennD

trong một số trường hợp, lệnh thứ hai không hoạt động vì không gian, Bạn có thể sử dụng lệnh đầu tiên để chia sẻ lưu trữ như thế này. ** wget -r ftp: / / tên người dùng% 40host: password @ host / dir / **
Wasim A.

Lưu ý: bạn nên sử dụng -mhoặc -r -l infbởi vì -r có độ sâu đệ quy mặc định là 5. Xem gnu.org/software/wget/manual/ Kẻ
ndemou

7

Ngoài wget, bạn cũng có thể sử dụng lftp trong chế độ tập lệnh. Lệnh sau sẽ phản chiếu nội dung của một thư mục FTP từ xa đã cho vào thư mục cục bộ đã cho và nó có thể được đưa vào công việc định kỳ:

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

Nó tự động xử lý đệ quy vào các thư mục và cho phép chỉ định thư mục bắt đầu từ xa để tải dữ liệu từ đó.


5

Bạn có thể sử dụng 'curlftpfs - gắn máy chủ ftp làm thư mục cục bộ' và sau khi được gắn kết, bạn có thể sử dụng các công cụ tệp thông thường như 'cp -r'.


curlftpfscó vấn đề về hiệu suất lớn ngay bây giờ trừ khi bạn hạ cấplibcurl3-gnutls
Hengjie

5

Kiểm tra lệnh wget dưới đây để tải xuống dữ liệu từ FTP theo cách đệ quy.

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

-r: Dành cho tải về đệ quy.

-np: Không dành cho cha mẹ tăng dần.

-nH: Là để vô hiệu hóa việc tạo thư mục có tên giống như URL tức là abc.xyz.com

--cut-dirs: Là để bỏ qua số lượng thư mục cha. Giá trị của tùy chọn này sẽ khác nhau cho lệnh của bạn.

Bạn có thể kiểm tra bằng cách thực hiện lệnh trên.



2

Nên làm việc thử:

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

2

Sử dụng:

wget -m ftp://192.168.0.1

và nó sẽ phản chiếu tất cả các tập tin và thư mục.


Như tôi đã nói, đăng nhập qua FTP sẽ đưa tôi đến thư mục / home / admin và các tệp tôi cần nằm trong / var / www / html Vì vậy, khi tôi chạy lệnh bạn đề xuất, tôi chỉ nhận được nội dung của / home / admin Tôi đã thử chạy nó với 192.168.0.1/var/www/html , nhưng sau đó nó cố gắng CWD / home / admin / var / www / html. Làm thế nào để tôi đi đến thư mục này từ thư mục gốc?

Tôi không có kinh nghiệm với vấn đề cụ thể này, nhưng bạn có thể thử tạo một liên kết tượng trưng đến / var / www / html dưới nhà của bạn. Sau đó, bạn có thể sử dụng một địa chỉ như 192.168.0.1/html
uy tín

Tôi đã thử tạo một liên kết tượng trưng, ​​nhưng kết quả là wget tạo ra một liên kết tương tự trên địa phương của tôi.

1

Đó là cú pháp đúng. Không chắc chắn tại sao bạn không nhận được kết quả mong đợi.

Như đã từng có nhiều hơn một cách để làm điều đó. Hãy thử ncftp, đặc biệt là ncftpget


Tôi không thể cài đặt thêm phần mềm trên máy chủ mới của mình. Tôi có nên nói với wget để tải xuống tất cả các tệp từ / var / www / html không? Tôi đã thử tên người dùng wget -r : password@ip.of.old.host/var/www/html nhưng tôi nhận được một thư mục không tìm thấy lỗi.

1

Tôi có thể hiểu nếu bạn đang cố gắng chuyển thứ này vào cron hoặc thứ gì đó, nhưng tại sao không đơn giản là ftp vào máy chủ với máy khách bình thường của bạn và mget *? Đây có thể là một con đường nhanh hơn để thành công.


Tôi đã thử mget * nhưng nó không hoạt động với các thư mục con, nói rằng thư mục con cục bộ không tồn tại. Có cách nào để làm cho anh ta tạo các thư mục địa phương tự động?

Tùy thuộc vào khách hàng của bạn, công tắc -r thường thực hiện thủ thuật. IE: mget -r *
dr.pooter

Ừm. Máy khách ftp tiêu chuẩn AFAIK trong linux không được thiết kế để truy xuất các thư mục theo cách đệ quy. Ý tôi là - không có tùy chọn -r. các máy khách khác như ncftp hoặc lftp hỗ trợ truy xuất đệ quy nhưng chúng thường không có sẵn theo mặc định.
Stann

1

Như tôi đã nói, đăng nhập qua FTP sẽ đưa tôi đến thư mục / home / admin và các tệp tôi cần có trong / var / www / html

Tôi nghĩ rằng điều này sẽ làm việc trong trường hợp của bạn:

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

0

Tôi đã bắt gặp Windows hosting với tên người dùng là brinkster / tên người dùng, vì vậy wget sẽ đưa ra lỗi nếu bạn sử dụng cú pháp:

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

Để vượt qua điều này, sử dụng

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

Tôi đã phải đối mặt với điều này với Windows hosting @ brinkster.


-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename sẽ thực hiện công việc hoặc bạn có thể thêm * thay vì nhập tên tệp: làm cho wget nghĩ về cổng không hợp lệ trong trường hợp của bạn.


Câu trả lời này cho một câu hỏi bốn năm tuổi với nhiều câu trả lời được nêu lên không cung cấp bất cứ điều gì mới và thậm chí bỏ qua yêu cầu cho một bản sao đệ quy.
Sven
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.