Tôi đã gặp cùng một vấn đề và tôi muốn sử dụng lại cùng một tên tệp cho dù phía máy chủ đưa ra, trong trường hợp của bạn, bạn có thể lấy tên tệp theo basename
➸ basename 'http://mysite.com/myfile.jpg'
myfile.jpg
sau đó bạn có thể viết một hàm bash helper như:
➸ function download { name="$(basename $1)"; curl "$1" > "$name"; }
➸ download 'http://mysite.com/myfile.jpg'
nhưng trong trường hợp của tôi, tên tệp thậm chí không phải là một phần của url, nó đi kèm với việc xử lý nội dung; với curl dòng lệnh là
$ curl -fSL -R -J -O 'http://some-site.com/getData.php?arg=1&arg2=...'
bạn có thể bỏ qua phần -fSL
xử lý nếu phía máy chủ cung cấp Chuyển hướng 302; các -R
cho phía máy chủ timestamp, -J
xem xét phía máy chủ Content-Disposition
, và -O
chuyển sang hành vi tải thay vì bán phá giá trên thiết bị đầu cuối;
tuy nhiên, nó vẫn bị từ chối ghi đè nếu tên tệp tồn tại; Tôi muốn nó ghi đè nếu Last-Modified
dấu thời gian phía máy chủ mới hơn;
kết thúc với một giải pháp wget nó có thể làm như vậy:
$ wget -NS --content-disposition 'http://some-site.com/getData.php?arg=1&arg2=...'
đó -N
là kiểm tra tiemstamp phía máy chủ và chỉ ghi đè khi phía máy chủ có phiên bản mới; --content-disposition
là xem xét Content-Disposition
tiêu đề; và hành vi mặc định của wget là tải xuống, đến tên tệp được cung cấp từ phía máy chủ.
trong trường hợp của bạn, nếu bạn không quan tâm đến dấu thời gian, thì đó chỉ là
$ wget -O myfile.jpg http://mysite.com/myfile.jpg
curl
phiên bản nào trên hệ thống nào?