Bỏ qua tải xuống nếu tập tin tồn tại trong wget?


Câu trả lời:


269

Hãy thử tham số sau:

-nc, --no-clobber: bỏ qua các tải xuống sẽ tải xuống các tệp hiện có.

Sử dụng mẫu:

wget -nc http://example.com/pic.png

34
-nckhông ngăn chặn việc gửi yêu cầu HTTP và tải xuống tệp sau đó. Nó chỉ không làm gì sau khi tải xuống tệp nếu tệp đã được truy xuất đầy đủ. Có cách nào để ngăn chặn việc thực hiện yêu cầu HTTP nếu tệp đã tồn tại không? stackoverflow.com/questions/33203898/
hy

8
Như đã lưu ý về câu hỏi được liên kết, tôi không đồng ý - Nếu không sử dụng clobber và tên tệp tồn tại thì nó thoát. Thậm chí không có yêu cầu CHÍNH. Ngay cả khi đây không phải là trường hợp, hãy kiểm tra xem bạn có tệp nào để bắt đầu không :-)[ ! -e "$(basename $URL)" ] && wget $URL
plundra

3
Tôi nghĩ rằng tôi có thể nhận được kết quả khác nhau vì tôi đang sử dụng --recursivetùy chọn.
ma11hew28

197

Các -nc, --no-clobberlựa chọn không phải là giải pháp tốt nhất là tập tin mới sẽ không được tải. Người ta nên sử dụng -Nthay vì sẽ tải xuống và ghi đè lên tệp chỉ khi máy chủ có phiên bản mới hơn, vì vậy câu trả lời đúng là:

wget -N http://www.example.com/images/misc/pic.png

Sau đó, chạy Wget với -N, có hoặc không -rhoặc -pquyết định về việc có tải xuống bản sao mới hơn của tệp hay không phụ thuộc vào dấu thời gian cục bộ và từ xa và kích thước của tệp. -nccó thể không được chỉ định cùng lúc với -N.

-N, --timestamping: Bật thời gian dập.


39
Khi máy chủ không được cấu hình đúng cách -Ncó thể bị lỗi và wget sẽ luôn tải lại. Vì vậy, đôi khi -nclà giải pháp tốt hơn.
người dùng

2
Điều gì có thể là kịch bản áp dụng trong đó 'Khi máy chủ không được cấu hình đúng' sẽ xảy ra?
AjayKumarBasuthkar

khi bạn đang tải xuống từ một vị trí đã được sao chép, thay đổi tất cả các dấu thời gian.
Robert

Cho dù điều này là tốt nhất phụ thuộc vào bối cảnh. Ví dụ: tôi đang tải xuống ~ 1600 tệp từ danh sách, sau đó cập nhật danh sách để bao gồm thêm một số tệp. Các tệp không thay đổi nên tôi không quan tâm đến phiên bản mới nhất và tôi không muốn nó kiểm tra máy chủ để biết phiên bản mới của 1600 tệp mà tôi đã có.
JBentley

2
@AjayKumarBasuthkar: Khi máy chủ không hỗ trợ bất kỳ cách kiểm tra tệp mới hơn, wgetsẽ khiếu nại Last-modified header missing; đây chính xác là tình huống đã vạch ra.
Piskvor rời khỏi tòa nhà

23

Khi chạy Wget với -rhoặc -p, nhưng không -N, -ndhoặc -nc, tải xuống lại một tệp sẽ dẫn đến bản sao mới chỉ đơn giản là ghi đè lên bản cũ.

Vì vậy, việc thêm -ncsẽ ngăn hành vi này, thay vào đó làm cho phiên bản gốc được giữ nguyên và mọi bản sao mới hơn trên máy chủ sẽ bị bỏ qua.

Xem thêm thông tin tại GNU.


18

Câu trả lời tôi đang tìm kiếm là tại https://unix.stackexchange.com/a/9557/114862 .

Sử dụng -ccờ khi tệp cục bộ có kích thước lớn hơn hoặc bằng với phiên bản máy chủ sẽ tránh tải xuống lại.


1
Điều này đặc biệt tuyệt vời khi bạn đang tải xuống một loạt các tệp có cờ -i. wget -i filelist.txt -csẽ tiếp tục tải xuống thất bại của một danh sách các tập tin.
Trevor
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.