Lewati unduhan jika file ada di wget?

198

Ini adalah contoh paling sederhana menjalankan wget:

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

tetapi bagaimana membuat unduhan unduhan wget jika pic.pngsudah tersedia?

nais inpoh gan
sumber

Jawaban:

269

Coba parameter berikut:

-nc, --no-clobber: lewati unduhan yang akan mengunduh ke file yang ada.

Penggunaan sampel:

wget -nc http://example.com/pic.png
plundra
sumber
34
-nctidak mencegah pengiriman permintaan HTTP dan pengunduhan file selanjutnya. Hanya tidak melakukan apa-apa setelah mengunduh file jika file tersebut telah sepenuhnya diambil. Apakah ada cara untuk mencegah membuat permintaan HTTP jika file sudah ada? stackoverflow.com/questions/33203898/…
ma11hew28
8
Seperti dicatat pada pertanyaan yang ditautkan, saya tidak setuju - Jika tidak ada clobber yang digunakan dan nama file itu ada, ia keluar. Bahkan tidak ada permintaan KEPALA. Bahkan jika ini bukan masalahnya, periksa apakah Anda memiliki file untuk memulai dengan :-)[ ! -e "$(basename $URL)" ] && wget $URL
plundra
3
Saya pikir saya mungkin mendapatkan hasil yang berbeda karena saya menggunakan --recursiveopsi.
ma11hew28
197

The -nc, --no-clobberpilihan adalah bukan solusi terbaik sebagai file baru tidak akan diunduh. Orang harus menggunakan -Nyang akan mengunduh dan menimpa file hanya jika server memiliki versi yang lebih baru, jadi jawaban yang benar adalah:

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

Kemudian menjalankan Wget dengan -N, dengan atau tanpa -ratau -p, keputusan untuk mengunduh salinan file yang lebih baru tergantung pada timestamp lokal dan jarak jauh serta ukuran file. -ncmungkin tidak ditentukan secara bersamaan dengan -N.

-N, --timestamping: Nyalakan pencetakan waktu.

Daniel Sokolowski
sumber
39
Ketika server tidak dikonfigurasi dengan benar -Nmungkin gagal dan wget akan selalu mengunduh ulang. Jadi terkadang -ncsolusi yang lebih baik.
pengguna
2
skenario apa yang bisa diterapkan di mana 'Ketika server tidak dikonfigurasi dengan benar' akan terjadi?
AjayKumarBasuthkar
ketika Anda mengunduh dari lokasi yang disalin, mengubah semua cap waktu.
Robert
Apakah ini yang terbaik tergantung pada konteksnya. Sebagai contoh, saya mengunduh ~ 1600 file dari daftar, dan kemudian memperbarui daftar untuk memasukkan beberapa file lagi. File tidak berubah jadi saya tidak peduli dengan versi terbaru dan saya tidak ingin memeriksa server untuk versi baru dari 1600 file yang sudah saya miliki.
JBentley
2
@AjayKumarBasuthkar: Ketika server tidak mendukung cara apa pun untuk memeriksa file yang lebih baru, wgetakan mengeluh Last-modified header missing; ini persis situasi yang diuraikan.
Piskvor meninggalkan gedung
23

Saat menjalankan Wget dengan -ratau -p, tetapi tanpa -N,, -ndatau -ncmengunduh ulang file akan menghasilkan salinan baru hanya dengan menimpa yang lama.

Jadi menambahkan -ncakan mencegah perilaku ini, alih-alih menyebabkan versi asli dipertahankan dan salinan yang lebih baru di server diabaikan.

Lihat info lebih lanjut di GNU.

Mahesh
sumber
18

Jawaban yang saya cari adalah di https://unix.stackexchange.com/a/9557/114862 .

Menggunakan -cbendera ketika file lokal berukuran lebih besar atau sama dengan versi server akan menghindari mengunduh ulang.

jsta
sumber
1
Ini sangat bagus ketika Anda mengunduh banyak file dengan flag -i. wget -i filelist.txt -cakan melanjutkan pengunduhan daftar file yang gagal.
Trevor