2013-08-07 31 views
22

Có thể sử dụng các ký tự đại diện trong các truy vấn wget khi tải xuống từ các thư mục không? Về cơ bản, tôi có một trang web, ví dụ: www.download.example.com/dir/version/package.rpm. Tuy nhiên, thư mục phiên bản thay đổi mọi lúc và đôi khi chứa nhiều gói RPM. Có một truy vấn wget duy nhất mà sẽ nhận được tôi chỉ và tất cả các gói trong thư mục version mà không biết phiên bản đó là gì? Trong thế giới lý tưởng của tôi, truy vấn sẽ là một cái gì đó như:Sử dụng ký tự đại diện trong truy vấn wget hoặc curl

wget www.download.example.com/dir/*/*.rpm 

Nếu có một cách để làm điều này với curl, điều đó sẽ làm việc tốt.

Trả lời

24

Bạn không thể sử dụng các ký tự đại diện trong wget nhưng cờ -A sẽ hoạt động. Từ số wget manpage:

Bạn muốn tải xuống tất cả gif từ thư mục trên máy chủ http. Bạn đã thử wget http://www.server.com/dir/*.gif, nhưng điều đó không hiệu quả vì việc truy xuất http không hỗ trợ tính năng globbing. Trong trường hợp đó, sử dụng: wget -r -l1 --no-parent -A.gif http://www.server.com/dir/

Edit: tìm thấy một related question

danh bạ Về:

Có một tiện ích gọi là LFTP, trong đó có một số hỗ trợ cho globbing. Hãy xem manpage. Có một số khác question on Linux & Unix bao gồm việc sử dụng nó trong một kịch bản tương tự như của bạn.

+1

Ok, điều này cho phép tôi chỉ định rằng tôi chỉ muốn tệp '.rpm'. Tuy nhiên, vấn đề của tên thư mục mơ hồ vẫn còn. Làm thế nào để tôi nói 'wget' rằng tên thư mục là không có liên quan và chỉ cần nhảy đến thư mục có chứa các tập tin RPM. – mart1n

+0

@ mart1n đã thêm thông tin vào lftp để trả lời, hy vọng nó sẽ giúp –

+0

Ah, gọn gàng. LFTP thực sự làm việc khá tốt. Cảm ơn bạn! – mart1n

1

Mặc dù loại giải pháp trên hoạt động, nó không thành công khi bạn chỉ muốn tải xuống một số thư mục nhất định, nhưng không phải tất cả. Ví dụ, nếu bạn có:

http://site.io/like/ 
http://site.io/like2/ 
http://site.io/nolike/ 

Thay vì đặt tên thư mục bạn muốn trong một tập tin văn bản, ví dụ: dirs.txt:

like/ 
like2/ 

Sau đó sử dụng wget với lệnh sau đây tùy chọn -i dirs.txt -B <base-URL> như sau:

wget -nH -nc -np -r -e robots=off -R "index.html*" -i dirs.txt -B http://site.io/ 

Si nce, tôi không nghĩ bạn có thể sử dụng thư mục trong danh sách -A-R. (?)

7

Nếu bạn có thể tìm thấy mẫu trong truy vấn của mình, bạn có thể sử dụng mở rộng bash cú đúp để thực hiện tác vụ này.

Ví dụ, trong trường hợp của bạn, bạn có thể sử dụng một cái gì đó như:

wget www.download.example.com/dir/{version,old}/package{00..99}.rpm 

Ngoài ra, bạn có thể kết hợp với các thông số -A-R để lọc kết quả của bạn.

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