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 (),
))