Jika saya menjalankan wget dua kali, ia tidak mengenali bahwa ia telah mengunduh file itu, dan membuat yang baru. Apakah ada cara untuk mencegahnya mengunduh file lagi?
$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...
$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png.1’
...
(Senang menggunakan ikal atau alternatif skrip serupa jika wget tidak bisa melakukan ini.)
Jawaban:
Saya sarankan Anda menggunakan
-N
opsi.Ini memungkinkan time-stamping, yang mengunduh ulang file hanya jika lebih baru di server daripada versi yang diunduh.
Peringatan (dari komentar KasiyA)
Jika server tidak dikonfigurasi dengan benar, itu mungkin selalu melaporkan bahwa file tersebut baru dan
-N
akan selalu mengunduh ulang file. Dalam hal ini,-nc
mungkin merupakan opsi yang lebih baik.sumber
-N
dapat gagal dan wget akan selalu mengunduh ulang. Jadi terkadang-nc
lebih baik daripada-N
Ya itu
-c
pilihan.Jika file sama, upaya unduhan kedua akan berhenti.
Peringatan (dari komentar jofel)
Jika file telah berubah di server,
-c
opsi dapat memberikan hasil yang salah.Dengan
-c
, wget hanya meminta server untuk data di luar bagian file yang sudah diunduh, tidak ada yang lain. Itu tidak memeriksa apakah ada perubahan pada bagian file yang sudah diunduh. Dengan demikian, Anda bisa file yang rusak yang merupakan campuran dari file lama dan baru.Tes lokal
Anda dapat mengujinya dengan menjalankan server web lokal sederhana sebagai berikut (Terima kasih atas jawaban @roadmr ):
Buka jendela Terminal dan ketik:
Sekarang buka Terminal lain dan lakukan:
Perhatikan bahwa itu
filename-to-download
adalah file yang terletak di/path/to/parent-download-dir/
mana kita ingin mengunduhnya.Sekarang jika Anda menjalankan perintah wget beberapa kali, Anda akan melihat:
Oke, sekarang buka
/path/to/parent-download-dir/
direktori dan tambahkan sesuatu ke file sumber, misalnya jika itu adalah file teks, tambahkan baris tambahan sederhana di dalamnya dan simpan file tersebut. Sekarang coba denganwget -c ...
. Hebat, sekarang Anda akan melihat file tersebut diunduh lagi tetapi Anda telah mengunduhnya sebelumnya.Alasan: mengapa mengunduh ulang?
karena ukurannya berubah menjadi ukuran yang lebih besar daripada file yang diunduh lama dan tidak ada yang lain.
sumber
-nc
tidak seperti yang Anda katakan tetapi-c
opsi akan berfungsi dan itu sebabnya saya sebutkan-c
opsi terlebih dahulu.-c
,wget
meminta server untuk data di luar bagian file yang sudah diunduh, tidak ada yang lain. Tidak memeriksa apakah ada perubahan pada bagian file yang sudah diunduh di server. Paling buruk Anda mendapatkan file yang rusak yang merupakan campuran antara file lama dan baru.Juga ada opsi lain
-nc
untuk wgetting:Ketika
-nc
opsi ditentukan, Wget akan menolak untuk men-download salinan file yang sama. Jika Anda memiliki file yang sama yangwget
mencoba untuk mengunduh, itu akan menolak untuk mengunduhnya kecuali jika Anda mengganti nama atau menghapus file lokal.Kadang-kadang opsi ini sangat bagus dan saya merekomendasikan untuk menggunakan
-nc
opsi sebagai ganti keduanya-c
atau-N
opsi karena opsi ini akan menimpa file unduhan dengan file lokal Anda jika mereka memiliki nama yang sama.Peringatan (dari komentar jofel)
The
-nc
pilihan tidak memperbarui file jika itu telah berubah di server. Jika Anda tahu file akan berubah,-N
opsi lebih disukai. Jika Anda tahu file tidak akan berubah (atau Anda tidak peduli) maka-nc
tidak masalah.sumber
Saya tahu ini adalah pertanyaan khusus tentang wget tetapi OP memang menyebutkan "Senang menggunakan curl atau alternatif skrip serupa jika wget tidak bisa melakukan ini." Saya tidak yakin apa persyaratannya di sini (banyak file, pertahankan versi lama jika berbeda dari aslinya, ganti dengan versi yang baru diunduh). Bergantung pada apa yang Anda inginkan dan bagaimana Anda ingin menangani duplikat Anda mungkin perlu lebih dari ini .. Cara yang sangat sederhana untuk melakukan apa yang Anda inginkan adalah dengan menggunakan ikal saja.
Perintah ini akan mengganti file lama dengan yang baru diunduh setiap kali.
Jangan output ini ke terminal (tanpa "> [nama file]") jika Anda mengunduh file biner sebagai lawan dari teks. Melakukan hal itu akan berpotensi mengacaukan sesi terminal Anda. Jika Anda melakukan ini secara tidak sengaja, Anda mungkin perlu membuka sesi shell / terminal lain.
sumber