2008-11-07 31 views
421

Tôi có thư mục web nơi lưu trữ một số tệp 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ư:Sử dụng wget để đệ quy tìm thư mục có các tệp tùy ý trong đó

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

.vim giữ nhiều tệp và thư mục. Tôi muốn nhân rộng trên máy khách bằng wget. Có vẻ như không thể tìm thấy kết hợp phù hợp với cờ wget để hoàn thành công việc này. Ý tưởng nào?

Trả lời

727

Bạn phải vượt qua các tùy chọn -np/--no-parent để 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, các lệnh sẽ trông như thế này:

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

Để tránh tải tự động tạo ra index.html file, sử dụng tùy chọn -R/--reject:

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

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

+1

Tại sao không có thư mục nào trong số này hoạt động cho http://www.w3.org/History/1991-WWW-NeXT/Implementation/? Nó sẽ chỉ tải xuống robots.txt – matteo

+18

@matteo vì robots.txt có thể không cho phép thu thập dữ liệu trang web. Bạn nên thêm -e robots = off để buộc thu thập dữ liệu. – gaborous

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

hoạt động cho tôi.

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

0

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

wget -r http://stackoverflow.com/ 
+8

Điều này không thực sự tải xuống thư mục, nhưng tất cả các tệp 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

103

Để tải một thư mục đệ quy, mà từ chối index.html * tệp và tải xuống không có tên máy chủ, thư mục chính 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 
+0

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

+26

@matteo thử thêm: -e robots = off – paulj

26

Đây là lệnh wget hoàn chỉnh mà làm việc cho tôi để tải về tập tin 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/ 
4

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

mục struct:

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

Và bạn muốn tải downloads/good nhưng không downloads/bad thư mục:

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

Bạn nên sử dụng -m (gương) cờ, vì điều đó sẽ chăm sóc để không lộn xộn với dấu thời gian và để tái chế vô thời hạn.

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

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

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

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

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

Wget 1,18 có thể hoạt động tốt hơn, ví dụ như, tôi bị cắn bởi lỗi 1.12 lỗi ...

wget --recursive (...) 

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

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

0

Phiên bản này tải xuống đệ quy và không tạo thư mục chính.

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" 
} 

Cách sử dụng:

  1. Thêm vào ~/.bashrc hay dán vào thiết bị đầu cuối
  2. wgetod "http://example.com/x/"
0

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

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

Vậy đó. Nó sẽ tải xuống cây địa phương sau đây: ./example.com/configs/.vim. Tuy nhiên nếu bạn không muốn hai thư mục đầu tiên, sau đó sử dụng cờ thêm --cut-dirs=2 như đề xuất trong bài trả lời trước đó:

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

Và nó sẽ tải về cây tập tin của bạn chỉ 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ừ wget manual, nó là một ví dụ rất sạch sẽ về phía cuối của phần 4.3.

Các vấn đề liên quan