Saya perlu mengunduh file dari server HTTP, tetapi hanya jika itu berubah sejak terakhir kali saya mengunduhnya (mis. Melalui If-Modified-Since
tajuk). Saya juga perlu menggunakan nama khusus untuk file di disk saya.
Alat apa yang dapat saya gunakan untuk tugas ini di linux?
wget -N
tidak dapat digunakan karena -N
tidak dapat digunakan dengan -O
.
Jawaban:
Pertimbangkan untuk menggunakan
curl
daripadawget
:man curl
mengatakan:Jika
$file
belum tentu ada sebelumnya, Anda harus menggunakan-z
flag yang bersyarat, menggunakantest -e "$file"
:(Perhatikan bahwa kami tidak mengutip ekspansi di
$zflag
sini, karena kami ingin itu mengalami pemisahan ke 0 atau 2 token).Jika shell Anda mendukung array (mis. Bash), maka kami memiliki versi yang lebih aman dan bersih:
sumber
Switch wget
-N
hanya mendapatkan file jika telah berubah sehingga pendekatan yang mungkin dilakukan adalah dengan menggunakan-N
saklar sederhana yang akan mendapatkan file jika perlu tetapi meninggalkannya dengan nama yang salah. Kemudian buat tautan keras menggunakanln -P
perintah untuk menautkannya ke "file" dengan nama yang benar. File yang ditautkan memiliki metadata yang sama dengan aslinya.Satu-satunya batasan adalah Anda tidak dapat memiliki tautan keras melintasi batas-batas sistem file.
sumber
Skrip Python 3.5+ untuk membungkus perintah curl:
sumber
chain
:)Pendekatan yang mirip dengan " tanggal cek " (dengan "curl - time-cond"), akan mengunduh sesuai dengan perbandingan ukuran file, yaitu Unduh hanya jika file lokal memiliki ukuran yang berbeda dari file jarak jauh .
Ini berguna misalnya, ketika proses pengunduhan gagal di tengah , dan dengan demikian file yang diunduh lokal mendapatkan tanggal yang lebih baru daripada file jarak jauh, tetapi sebenarnya rusak, dan pengunduhan ulang diperlukan:
Opsi "curl -z / --time-cond" (yang disarankan di jawaban lain) tidak akan mengunduh file jarak jauh dalam kasus ini (karena file lokal memiliki tanggal yang lebih baru), tetapi skrip " pemeriksaan ukuran " ini akan!
sumber