Оказывается, и curl, и wget могут это делать, но, вероятно, в Python все-таки стоит сделать это. Вот что я в итоге написал:
#!/usr/bin/env python3
import sys, dateutil.parser, subprocess, requests
from getopt import getopt
errflag = 0
gTouch = None
gUsage = """Usage: lastmod [-t file] url
where:
-t file Touches the given file to make its modification date
the same as the URL modification date.
url A URL to be retrieved
"""
opts, args = getopt(sys.argv[1:], "t:v?")
for k, v in opts:
if k == "-t": # File to touch
gTouch = v
elif k == "-?": # Write out usage and exit
errflag += 1
if len(args) != 1:
errflag += 1
if errflag:
sys.stderr.write(USAGE)
sys.exit(1)
res = requests.head(args[0])
if res.status_code != 200:
sys.stderr.write("Failed to retrieve URL\n")
sys.exit(1)
if not 'Last-Modified' in res.headers:
sys.stderr.write("Headers has no last-modified date\n")
sys.exit(1)
dt = dateutil.parser.parse(res.headers['Last-Modified'])
if gTouch:
subprocess.call(["touch", "-t", dt.strftime("%Y%m%d%H%m"), gTouch])
else:
sys.stdout.write("%s\n" % dt.ctime())