Có cách nào để vô hiệu hóa wget từ việc lấy các tập tin từ thư mục mẹ đến độ sâu nhất định không?


11

wget có tùy chọn như -npvậy sẽ vô hiệu hóa nhận tệp từ bất kỳ thư mục cha. Tôi cần một cái gì đó tương tự nhưng linh hoạt hơn một chút. Xem xét:

www.foo.com/bar1/bar2/bar3/index.html

Tôi muốn có được mọi thứ nhưng không "cao hơn" (trong hệ thống phân cấp cây) hơn bar2(!). Vì vậy, bar2cũng nên được lấy nhưng không bar1.

Có cách nào để làm cho wget chọn lọc hơn?

Bối cảnh: Tôi đang cố gắng phản chiếu một trang web, với cấu trúc logic tương tự - điểm bắt đầu, sau đó lên, rồi xuống. Nếu có một công cụ khác hơn wget, phù hợp hơn cho bố cục như vậy, xin vui lòng cho tôi biết là tốt.

Cập nhật

Hoặc thay vì chỉ định chiều sâu có thể, có thể một cái gì đó như "không có cha mẹ, trừ khi họ khớp với URL này hoặc URL đó".

Cập nhật 2

Có một số cấu trúc trên máy chủ, phải không? Bạn có thể hình dung nó như một cái cây. Vì vậy, thông thường với "--no-Parent", bạn bắt đầu từ một số điểm A và chỉ đi xuống.

Mong muốn của tôi, là khả năng đi lên - thể hiện bằng cách nói, nó được phép đi lên các nút X, hoặc (tương đương 100%) rằng nó được phép đi lên nút B (trong đó khoảng cách BA = X).

Trong mọi trường hợp, các quy tắc để đi xuống vẫn được xác định bởi người dùng (ví dụ: chỉ đi xuống theo cấp độ Y).

Làm thế nào để lưu trữ nó? Trên thực tế, đây không phải là câu hỏi - wgetmặc định tái tạo cấu trúc máy chủ, không có gì phải sợ ở đây, hoặc không cần phải sửa chữa bất cứ điều gì. Vì vậy, trong 2 từ - như thường lệ.

Cập nhật 3

Cấu trúc thư mục bên dưới - giả sử rằng trong mỗi thư mục chỉ có một tệp, trong R - R.html, v.v. Điều này được đơn giản hóa tất nhiên vì bạn có thể có nhiều hơn một trang.

        R 
       / \
      B   G
     / \
    C   F
   / \
  A   D
 /
E 

A (A.html) là điểm bắt đầu của tôi, X = 2 (vì vậy B là nút cấp cao nhất tôi muốn tìm nạp). Trong ví dụ cụ thể này, điều này có nghĩa là tìm nạp tất cả các trang trừ R.html và G.html. A.html được gọi là "điểm bắt đầu" bởi vì tôi phải bắt đầu từ nó, không phải từ B.

Cập nhật 4

Đặt tên được sử dụng từ Cập nhật 3.

wget TÙY CHỌN www.foo.com/B/C/A/A.html

Câu hỏi là các tùy chọn để có được tất cả các trang từ thư mục B trở xuống (biết rằng bạn phải bắt đầu từ A.html).


Bạn muốn bar2lấy nhưng không bar1? Nơi nào bar2sẽ cư trú? Điều gì xảy ra nếu hai hoặc nhiều thư mục mà bạn không muốn có các thư mục con có tên giống hệt nhau, liệu nội dung của chúng có được hợp nhất không? Gần như chắc chắn sẽ dễ dàng hơn khi chỉ cần lấy toàn bộ trang web chết tiệt và sau đó cắt tỉa / di chuyển mọi thứ xung quanh như bạn mong muốn.
Kilian Foth

@Kilian Foth, bạn có ý gì khi "lấy toàn bộ trang web chết tiệt"? Lấy nó? Nói chung, nó là quá mức cần thiết, nó có thể có nghĩa là tìm nạp TB khi cần MB. Đối với phần còn lại, xem update2.
greenoldman

Không chắc chắn những gì bạn có ý nghĩa. Giải thích duy nhất tôi có thể đưa ra là, bạn muốn bar2thư mục và tất cả nội dung của nó. Nếu đó không phải là nó, xin vui lòng làm rõ.
Faheem Mitha

@Faheem Mitha, "nội dung của nó" = "toàn bộ cây con". Vâng, đây chỉ là sự giải thích mà tôi tin, và đó chính xác là điều tôi muốn nói.
greenoldman

Câu trả lời:


12

Tôi chưa thử, nhưng sử dụng -I và -X có thể cung cấp cho bạn những gì bạn muốn. Những cố gắng đầu tiên của tôi sẽ là dọc theo dòng

wget -m -I bar1/bar2 -X "*" http://www.foo.com/bar1/bar2/bar3/index.html

Giải thích về các lựa chọn:

-m: 
   --mirror
       Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets
       infinite recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l
       inf --no-remove-listing.
-I: list
   --include-directories=list
       Specify a comma-separated list of directories you wish to follow when downloading.  Elements of
       list may contain wildcards.
-X: list
   --exclude-directories=list
       Specify a comma-separated list of directories you wish to exclude from download.  Elements of list
       may contain wildcards.

4

Bạn cần thêm một cuối cùng / vào URL, nếu không bạn sẽ không có được những gì bạn muốn.

Nếu bạn muốn nhận tất cả nội dung tại www.myhostname.com/somedirectory thì cú pháp nên đọc như sau:

wget -r -nH http://www.myhostname.com/somedirectory/

Hãy thử nó mà không có kết thúc / và xem những gì sẽ xảy ra. Sau đó thử nó với /.


1
Nó vẫn sẽ tăng lên các thư mục cao hơn nếu các trang được liên kết trong đó đề cập đến như vậy
EkriirkE

Cảm ơn rất nhiều cho các gợi ý với dấu gạch chéo! Nó giúp tôi giải quyết vấn đề với các tệp không liên quan được tìm nạp bởi wget từ các thư mục lân cận (anh chị em).
AntonK

4

Tôi nghĩ rằng câu trả lời đúng ở đây là --no-parenttùy chọ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.

Lá cờ này hoàn toàn trái ngược với những gì OP muốn
EkriirkE

1

Có thể tôi đang thiếu một cái gì đó, nhưng nếu đó là những gì bạn muốn thì

wget -c -np -r www.foo.com/bar1/bar2

làm việc cho tôi (sử dụng ví dụ của bạn). Tất nhiên, với các tùy chọn đó, bạn cũng sẽ nhận được tất cả cấu trúc thư mục ở trên, từ www.foo.comtrên xuống. Nếu bạn chỉ muốn bar2ở cấp cao nhất, thì hãy làm

wget -c -np -r -nH --cut-dirs=1 www.foo.com/bar1/bar2

-nHthoát khỏi www.foo.com--cut-dirs=1thoát khỏi bar1, vì vậy bạn sẽ nhận được bar2và các thư mục con của nó được tải xuống thư mục hiện tại. Để biết thêm thông tin, hãy xem man wget, khá dễ đọc và có ví dụ.


Bạn đã bỏ qua điểm bắt đầu, bạn phải theo các liên kết. Bạn đã giả định rằng điểm bắt đầu đồng thời là cấp cao nhất (đây là trường hợp tầm thường np), nhưng tôi đang tìm giải pháp chung, khi cấp cao nhất nằm trên điểm bắt đầu.
greenoldman

@macias: Xin lỗi, tôi không theo dõi bạn. Bạn có thể minh họa bằng một ví dụ?
Faheem Mitha

Tôi vừa thêm một "ảnh chụp màn hình" ASCII. Hy vọng điều này có thể giúp cho bạn. Trong ví dụ này A là điểm bắt đầu.
greenoldman

@macias: Vì vậy, bạn không muốn chỉ định đường dẫn đến B(theo ví dụ của bạn), nhưng đúng hơn A? Nếu vậy, tại sao? Đây có phải là vì bạn muốn tự động hóa một số tập lệnh hoặc vì một số lý do khác? Tôi cũng không chắc ý của bạn là gì bởi X = 2. Điều đó có nghĩa là cấp 2? Nếu bạn đang cố gắng để lấy danh bạ tiếp tục xuống trong cây, tôi không chắc chắn làm thế nào bạn phân biệt Btừ G.
Faheem Mitha

A là điểm bắt đầu, bởi vì nó là điểm bắt đầu - hãy nhìn xem, tôi ở phía khách hàng chứ không phải máy chủ. IOW - Tôi KHÔNG sở hữu máy chủ và tôi đã không tạo cấu trúc này. Tôi phải đối phó với những gì tôi thấy. X là biểu tượng từ Bản cập nhật 2, "độ sâu" có bao nhiêu cấp bạn có thể tăng lên. Bạn phân biệt B với G, vì B là B và G không phải là B và bạn thấy B, vì đó là một phần của URL cho A. Tôi đã đọc lại câu hỏi trong Bản cập nhật 4.
greenoldman
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.