2015-05-23 15 views
13

Tôi đã thử '-N' và '--no-clobber' nhưng kết quả duy nhất tôi nhận được là lấy một bản sao mới của example.exe hiện có với số một số được thêm bằng cách sử dụng đồng bộ này 'example.exe.1' . Đây không phải là những gì tôi muốn nhận được. Tôi chỉ cần tải xuống và ghi đè lên tệp example.exe trong cùng thư mục mà tôi đã lưu một bản sao của example.com mà không có wget xác minh nếu mỏ cũ hơn hoặc mới hơn là sự tôn trọng tệp example.exe đã có trong thư mục tải xuống của tôi . Bạn có nghĩ rằng tôi có thể hoặc tôi cần phải tạo ra một kịch bản mà xóa các tập tin example.exe hoặc có thể một cái gì đó mà thay đổi ngày sửa đổi của mình vv?Làm thế nào để buộc wget ghi đè lên một tệp hiện có bỏ qua dấu thời gian?

Trả lời

18

Nếu bạn chỉ định tệp đầu ra bằng cách sử dụng tùy chọn -O, nó sẽ ghi đè lên bất kỳ tệp hiện có nào.

Ví dụ:

wget -O index.html bbc.co.uk 

Run nhiều lần sẽ tiếp tục quá writting index.html.

+0

Nó cũng sẽ chạm vào tệp khi nó tải xuống (bao gồm lần đầu tiên), vì vậy dấu thời gian ban đầu của tệp sẽ không được giữ lại vì đó là khi không sử dụng nút chuyển '-O'. – Synetech

9

wget không cho phép bạn ghi đè lên tệp hiện có trừ khi bạn đặt tên tệp đầu ra trên dòng lệnh một cách rõ ràng với tùy chọn -O.

Tôi hơi lười và tôi không muốn nhập tên tệp đầu ra trên dòng lệnh khi nó đã được biết đến từ tệp đã tải xuống. Do đó, tôi sử dụng curl như sau:

curl -O http://ftp.vim.org/vim/runtime/spell/fr.utf-8.spl 

Hãy cẩn thận khi tải xuống các tệp như thế này từ các trang web không an toàn. Lệnh trên sẽ viết một tệp có tên là trang web được kết nối muốn đặt tên cho nó (bên trong thư mục hiện tại). Tên cuối cùng có thể bị ẩn thông qua chuyển hướng và tập lệnh php hoặc bị làm mờ trong URL. Bạn có thể sẽ ghi đè lên một tệp mà bạn không muốn ghi đè lên.

Và nếu bạn tìm thấy tệp có tên ls hoặc bất kỳ tên hấp dẫn nào khác trong thư mục hiện tại sau khi sử dụng curl theo cách đó, hãy không thực thi tệp đã tải xuống. Nó có thể là một trojan tải xuống từ một trang web lừa đảo hoặc bị hỏng!

+2

về cơ bản, không sử dụng phương pháp này –

+0

trừ khi bạn tin cậy trang web. Giống như anh ta nói. – gbtimmon

6
wget --backups=1 google.com 

đổi tên gốc tập tin với .1 hậu tố và ghi file mới với tên tập tin mong muốn.

Không chính xác những gì được yêu cầu, nhưng có thể hữu ích trong một số trường hợp.

6

-c hoặc --continue

Từ manual:

Nếu bạn sử dụng '-c' trên một tập tin không trống, và máy chủ không hỗ trợ tiếp tục tải về, wget sẽ khởi động lại tải từ đầu và ghi đè lên tệp hiện tại hoàn toàn.

+2

máy chủ thường hỗ trợ tải xuống liên tục. – teknopaul

2

Tôi thích tùy chọn -c. Tôi bắt đầu với trang người đàn ông sau đó trên web nhưng tôi đã tìm kiếm điều này nhiều lần. Giống như nếu bạn đang chuyển tiếp một webcam nên hình ảnh cần luôn được đặt tên là image.jpg. Có vẻ như nó phải rõ ràng hơn trong trang người đàn ông.

Tôi đã sử dụng này cho một vài năm để tải về mọi thứ trong nền, đôi khi kết hợp với "giới hạn lãi suất =" trong file wgetrc tôi

while true 
do 
wget -c -i url.txt && break 
echo "Restarting wget" 
sleep 2 
done 

Thực hiện một chút tập tin gọi là url.txt và dán URL của tệp vào đó. Đặt tập lệnh này trong đường dẫn của bạn hoặc có thể là bí danh và chạy nó. Nó tiếp tục thử tải xuống cho đến khi không có lỗi. Đôi khi, cuối cùng, nó được đưa vào vòng lặp hiển thị

416 Requested Range Not Satisfiable 
The file is already fully retrieved; nothing to do. 

nhưng điều đó vô hại, chỉ cần ctrl-c. Tôi nghĩ rằng nó luôn luôn nhận được các tập tin tôi muốn ngay cả khi wget chạy ra khỏi retries hoặc kết nối tạm thời biến mất. Tôi đã tải xuống mọi thứ trong nhiều ngày cùng một lúc. Một hình ảnh CD trên dialup, có, luôn luôn với wget.

0

Trường hợp sử dụng của tôi liên quan đến hai URL khác nhau, đôi khi trường hợp thứ hai không tồn tại, nhưng nếu nó tồn tại, tôi muốn ghi đè tệp đầu tiên.

Sự cố khi sử dụng wget -O là khi tệp thứ hai KHÔNG tồn tại, tệp sẽ ghi đè tệp đầu tiên bằng tệp BLANK.

Vì vậy, cách duy nhất tôi có thể tìm thấy là với một câu lệnh if:

kiểm tra --spider nếu một tập tin tồn tại, và trả về 0 nếu nó

--quiet không lặng lẽ, không có đầu ra

-nv là yên tĩnh, nhưng vẫn báo cáo lỗi

wget -nv https://example.com/files/file01.png -O file01.png 
# quietly check if a different version exists 
wget --quiet --spider https://example.com/custom-files/file01.png 
if [ $? -eq 0 ] ; then  
    # A different version exists, so download and overwrite the first 
    wget -nv https://example.com/custom-files/file01.png -O file01.png 
fi 

đó là tiết, nhưng tôi thấy nó cần thiết. Tôi hy vọng điều này là hữu ích cho một ai đó.

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