wget -o viết các tập tin trống về thất bại


14

Nếu tôi viết wget "không có địa chỉ như vậy" -o "test.html" thì đầu tiên nó sẽ tạo test.html và trong trường hợp thất bại, hãy để trống. Tuy nhiên, khi không sử dụng -o, nó sẽ chờ xem liệu quá trình tải xuống có thành công hay không và chỉ sau đó, nó sẽ ghi tệp.

Tôi cũng muốn hành vi thứ hai được áp dụng cho -o, điều đó có thể không?

Câu trả lời:


17

wget trả về trạng thái thoát khác không khi không tìm thấy URL, do đó bạn có thể nối thêm lệnh xóa khi không thành công:

wget "url" -O file || rm -f file

Hoặc tạo một tệp tạm thời và chỉ di chuyển nó đến nơi bạn muốn thành công:

wget "url" -O /tmp/wget && mv /tmp/wget file

Thứ hai có lợi ích là không xóa một tệp hiện có khi thất bại, nhưng hãy chắc chắn sử dụng các tên tạm thời duy nhất (xem man tempfile) nếu bạn đang chạy song song nhiều trường hợp.


Ngoài ra, việc thêm --retry-Connrefuse có thể giúp ngăn chặn tệp trống ở vị trí đầu tiên.
akom

Nếu điều này xảy ra trong một exec trong một biểu hiện rối, thay đổi tạo ra => tập tin để trừ => "[file -s]" có thể làm cho nó tự chữa bệnh.
akom

13

Như được viết trong các bình luận, wget -O giống như một chuyển hướng shell luôn ghi vào tệp bất kể lỗi.

Bạn có thể sử dụng curl -fthay thế:

curl -f http://nonexistent/file.jpg -o localfile.jpg

Nó sẽ không chạm vào tệp cục bộ nếu có lỗi khi tìm nạp tệp.


4

Cú pháp đúng là

wget "url" -O file

chú ý UPPERCASE O. Các tùy chọn -o cho biết bạn muốn viết một tệp nhật ký , đó là lý do tại sao nó luôn được viết ngay cả khi thất bại.


Lúc đầu, tôi nghĩ rằng nó đang hoạt động, nhưng sau đó tôi thấy nó không hoạt động. thử wget " host.does.not.exist " -O "blankFile" Một lỗi được trả về, nhưng tệp rỗng được tạo.
akurtser

1
@akurtser bạn nói đúng. Tôi nghĩ không có cách nào để nói với wget không tạo tập tin. Tôi tìm thấy chủ đề này: mail-archive.com/wget@sunsite.dk/msg08586.html trong đó họ thảo luận về vấn đề này. Điều cơ bản là bạn có thể tải xuống NHIỀU tệp vào cùng một tệp để nó được tạo vì wget không thể chắc chắn rằng TẤT CẢ các url sẽ thất bại.
Ông Shunz

Xin cảm ơn, đó là một phần của tập lệnh bash tôi đang viết, vì vậy trước tiên tôi sẽ cố lưu tệp tạm thời, trong trường hợp tải xuống thành công, sẽ được đổi tên. Không thanh lịch lắm, nhưng không thể nghĩ gì tốt hơn.
akurtser

1
@akurtser Chắc chắn bạn có thể kiểm tra mã trả về từ wget sau đó ... nó sẽ cho bạn biết nếu bạn có thể xóa tệp "nếu không tìm thấy". Vì vậy, không cần temp / đổi tên.
Ông Shunz

1
Tùy chọn -O là một chuyển hướng, nó chuyển hướng nội dung được tải xuống thành một tệp, ngay cả trong trường hợp không có nội dung. Do đó, một tệp luôn được tạo, ngay cả khi tải xuống không thành công.
Quan đến

0

Theo tài liệu trợ giúp (wget -h), bạn có thể sử dụng tùy chọn --spider để bỏ qua tải xuống (phiên bản 1.14).

Download:
  -S,  --server-response         print server response.
       --spider                  don't download anything.

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.