GNU/Linux >> Belajar Linux >  >> Linux

unduh file melalui http hanya jika diubah sejak pembaruan terakhir

Pertimbangkan untuk menggunakan curl bukannya wget :

curl -o "$file" -z "$file" "$uri"

man curl mengatakan:

-z /--time-cond

(HTTP/FTP) Meminta file yang telah diubah setelah waktu dan tanggal yang ditentukan, atau file yang telah diubah sebelum waktu tersebut. Ekspresi tanggal dapat berupa semua jenis string tanggal atau jika tidak cocok dengan string internal mana pun, ia akan mencoba mendapatkan waktu dari nama file yang diberikan.

Jika $file belum tentu ada sebelumnya, Anda harus menggunakan -z flag bersyarat, menggunakan test -e "$file" :

if test -e "$file"
then zflag="-z '$file'"
else zflag=
fi
curl -o "$file" $zflag "$uri"

(Perhatikan bahwa kami tidak mengutip perluasan $zflag di sini, karena kami ingin menjalani pemisahan menjadi 0 atau 2 token).

Jika shell Anda mendukung array (mis. Bash), maka kami memiliki versi yang lebih aman dan lebih bersih:

if test -e "$file"
then zflag=(-z "$file")
else zflag=()
fi
curl -o "$file" "${zflag[@]}" "$uri"

Sakelar wget -N hanya mendapatkan file jika telah berubah sehingga pendekatan yang mungkin adalah menggunakan -N sederhana switch yang akan mendapatkan file jika perlu tetapi meninggalkannya dengan nama yang salah. Kemudian buat tautan keras menggunakan ln -P perintah untuk menautkannya ke "file" dengan nama yang benar. File tertaut memiliki metadata yang sama dengan aslinya.

Satu-satunya batasan adalah Anda tidak dapat memiliki tautan keras melintasi batas sistem file.


Skrip Python 3.5+ untuk membungkus perintah curl:

import argparse
import pathlib

from subprocess import run
from itertools import chain

parser = argparse.ArgumentParser()
parser.add_argument('url')
parser.add_argument('filename', type=pathlib.Path)
args = parser.parse_args()

run(chain(
    ('curl', '-s', args.url),
    ('-o', str(args.filename)),
    ('-z', str(args.filename)) if args.filename.exists() else (),
))

Linux
  1. Perintah Untuk Mencetak Hanya 3 Karakter Terakhir Dari Sebuah String?

  2. Apakah Mungkin Mengunduh File Sangat Besar Secara Cerdas Atau Sebagian Melalui Ssh Dari Linux Ke Windows?

  3. Parameter unduhan paralel aria2c

  1. Bagaimana Cara Mengarahkan Hanya Stderr?

  2. Tambahkan Teks ke Semua File Dalam Folder?

  3. Grep dalam file log besar (>14 GB) hanya x GB terakhir?

  1. Temukan Hanya String Tertentu (domain) Ekstrak File Lain?

  2. Cara menggunakan wget untuk mengunduh file melalui proxy

  3. Bagaimana cara membuat file hanya jika tidak ada?