Sử dụng wget để tìm nạp đệ quy một thư mục chứa các tệp tùy ý trong đó


573

Tôi có một thư mục web nơi tôi lưu trữ một số tập tin cấu hình. Tôi muốn sử dụng wget để kéo các tệp đó xuống và duy trì cấu trúc hiện tại của chúng. Ví dụ, thư mục từ xa trông giống như:

http://mysite.com/configs/.vim/

.vim giữ nhiều tệp và thư mục. Tôi muốn sao chép nó trên máy khách bằng wget. Dường như không thể tìm thấy sự kết hợp đúng của cờ wget để thực hiện điều này. Có ý kiến ​​gì không?

Câu trả lời:


988

Bạn phải chuyển tùy chọn -np/ --no-parentcho wget(ngoài -r/ --recursive, tất nhiên), nếu không, nó sẽ theo liên kết trong chỉ mục thư mục trên trang web của tôi đến thư mục mẹ. Vì vậy, lệnh sẽ trông như thế này:

wget --recursive --no-parent http://example.com/configs/.vim/

Để tránh tải xuống các index.htmltệp được tạo tự động , hãy sử dụng tùy chọn -R/ --reject:

wget -r -np -R "index.html*" http://example.com/configs/.vim/

52
thêm -nH (cắt tên máy chủ) --cut-dirs = X (cắt bỏ thư mục X). hơi khó chịu khi phải đếm thủ công các thư mục cho X ..
lkraav

3
Tại sao những thứ này không hoạt động cho w3.org/History/1991-WWW-NeXT/Imcellenceation ? Nó sẽ chỉ tải xuống tệp robots.txt
matteo

31
@matteo vì robot.txt có thể không cho phép thu thập dữ liệu trang web. Bạn nên thêm -e robot = tắt để buộc thu thập thông tin.
gabious

thêm -X / perfect / path / to / thư mục để loại trừ một thư mục cụ thể
vishnu narayanan

3
Nếu bạn không muốn tải xuống toàn bộ nội dung, bạn có thể sử dụng: -l1 chỉ cần tải xuống thư mục (example.com trong trường hợp của bạn) -l2 tải xuống thư mục và tất cả các thư mục con cấp 1 ('example.com/s Something' nhưng không 'example.com/somthing/foo') v.v. Nếu bạn chèn tùy chọn không -l, wget sẽ tự động sử dụng -l 5. Nếu bạn chèn -l 0, bạn sẽ tải xuống toàn bộ Internet, vì wget sẽ theo mọi liên kết mà nó tìm thấy. stackoverflow.com/a/19695143/6785908
thật ngẫu nhiên-anh chàng

123

Để tải xuống một thư mục đệ quy, từ chối các tệp index.html * và tải xuống mà không có tên máy chủ, thư mục mẹ và toàn bộ cấu trúc thư mục:

wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data

Tôi không thể làm việc này: wget -r -nH --cut-dirs = 3 --no-Parent --reject = "index.html *" w3.org/History/1991-WWW-NeXT/Imcellenceation - -cut-dirs = 2 không hoạt động. Nó chỉ tải xuống tệp robots.txt thực sự nằm trong thư mục gốc. Tôi mất tích vì ai?
matteo

34
@matteo thử thêm: -e robot = tắt
Paul J

Để đệ quy tất cả các thư mục trong một thư mục, hãy sử dụng wget -r -nH --reject = "index.html *" mysite.io:1234/dir1/dir2
Prasanth Ganesan

115

Đối với bất cứ ai khác có vấn đề tương tự. Wget theo robots.txtđó có thể không cho phép bạn lấy trang web. Đừng lo lắng, bạn có thể tắt nó đi:

wget -e robots=off http://www.example.com/

http://www.gnu.org/software/wget/manual/html_node/Robot-Exinating.html


Khi bạn bỏ qua robot.txt, ít nhất bạn nên điều tiết các yêu cầu của mình. Hành vi được đề xuất trong câu trả lời này là rất bất lịch sự.
Không ai

@Nobody Vậy câu trả lời lịch sự cho vấn đề này là gì?
Phani Rithvij

@PhaniRithvij Tỷ lệ giới hạn yêu cầu của bạn, wget có các tham số cho nó. Lưu ý rằng một số người vẫn có thể gặp sự cố và việc xem xét tệp robot rõ ràng cho bạn biết rằng không được phép làm những gì bạn đang làm, thậm chí bạn có thể gặp rắc rối pháp lý.
Không ai là

37

Bạn nên sử dụng cờ -m (gương), vì điều đó cần chú ý để không gây rối với dấu thời gian và lặp lại vô thời hạn.

wget -m http://example.com/configs/.vim/

Nếu bạn thêm các điểm được đề cập bởi những người khác trong chuỗi này, thì đó sẽ là:

wget -m -e robots=off --no-parent http://example.com/configs/.vim/

34

Đây là lệnh wget hoàn chỉnh giúp tôi tải xuống các tệp từ thư mục của máy chủ (bỏ qua robots.txt):

wget -e robots=off --cut-dirs=3 --user-agent=Mozilla/5.0 --reject="index.html*" --no-parent --recursive --relative --level=1 --no-directories http://www.example.com/archive/example/5.3.0/

8

Nếu --no-parentkhông giúp được, bạn có thể sử dụng--include tùy chọn.

Thư mục cấu trúc:

http://<host>/downloads/good
http://<host>/downloads/bad

Và bạn muốn tải xuống downloads/goodnhưng không phải downloads/badthư mục:

wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good

5
wget -r http://mysite.com/configs/.vim/

làm việc cho tôi

Có lẽ bạn có một .wgetrc đang can thiệp vào nó?


5

Để tìm nạp một thư mục đệ quy với tên người dùng và mật khẩu, hãy sử dụng lệnh sau:

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/

2

Wget 1.18 có thể hoạt động tốt hơn, ví dụ: tôi đã bị cắn bởi lỗi phiên bản 1.12 trong đó ...

wget --recursive (...)

... chỉ truy xuất index.html thay vì tất cả các tệp.

Giải pháp thay thế là nhận thấy một số chuyển hướng 301 và thử vị trí mới - được cung cấp URL mới, wget có tất cả các tệp trong thư mục.


2

Tất cả bạn cần là hai cờ, một là "-r"cho đệ quy và "--no-parent"(hoặc -np) để không đi vào '.'".." . Như thế này:

wget -r --no-parent http://example.com/configs/.vim/

Đó là nó. Nó sẽ tải xuống cây cục bộ sau : ./example.com/configs/.vim. Tuy nhiên, nếu bạn không muốn hai thư mục đầu tiên, thì hãy sử dụng cờ bổ sung --cut-dirs=2như được đề xuất trong các câu trả lời trước đó:

wget -r --no-parent --cut-dirs=2 http://example.com/configs/.vim/

Và nó sẽ tải xuống cây tập tin của bạn vào ./.vim/

Trong thực tế, tôi đã nhận được dòng đầu tiên từ câu trả lời này chính xác từ hướng dẫn sử dụng wget , họ có một ví dụ rất rõ ràng vào cuối phần 4.3.


2

Tùy chọn sau đây dường như là sự kết hợp hoàn hảo khi xử lý tải xuống đệ quy:

wget -nd -np -P / mệnh / dir --recursive http: // url / dir1 / dir2

Đoạn trích có liên quan từ các trang man để thuận tiện:

   -nd
   --no-directories
       Do not create a hierarchy of directories when retrieving recursively.  With this option turned on, all files will get saved to the current directory, without clobbering (if a name shows up more than once, the
       filenames will get extensions .n).


   -np
   --no-parent
       Do not ever ascend to the parent directory when retrieving recursively.  This is a useful option, since it guarantees that only the files below a certain hierarchy will be downloaded.

1

Bạn sẽ có thể làm điều đó một cách đơn giản bằng cách thêm một -r

wget -r http://stackoverflow.com/

9
Điều này không thực sự tải xuống một thư mục, nhưng tất cả các tệp mà nó có thể tìm thấy trên máy chủ, bao gồm các thư mục phía trên thư mục bạn muốn tải xuống.
Luc

1

Phiên bản này tải về đệ quy và không tạo thư mục mẹ.

wgetod() {
    NSLASH="$(echo "$1" | perl -pe 's|.*://[^/]+(.*?)/?$|\1|' | grep -o / | wc -l)"
    NCUT=$((NSLASH > 0 ? NSLASH-1 : 0))
    wget -r -nH --user-agent=Mozilla/5.0 --cut-dirs=$NCUT --no-parent --reject="index.html*" "$1"
}

Sử dụng:

  1. Thêm ~/.bashrchoặc dán vào thiết bị đầu cuối
  2. wgetod "http://example.com/x/"
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.