Làm thế nào tôi có thể chỉ định curl (thông qua dòng lệnh) ghi đè lên một tập tin nếu nó đã tồn tại?


11

Tôi đang sử dụng curl trong cú pháp này:

curl -o myfile.jpg http://mysite.com/myfile.jpg

Nếu tôi chạy lệnh này hai lần, tôi nhận được hai tệp:

myfile.jpg
myfile-1.jpg

Làm thế nào tôi có thể nói với CURL rằng tôi muốn nó ghi đè lên tệp nếu nó tồn tại?


4
Không thể sao chép: curlphiên bản nào trên hệ thống nào?
enzotib

Câu trả lời:


21

Sử dụng:

curl http://mysite.com/myfile.jpg > myfile.jpg

2
Và trước đó, đảm bảo bạn không noclobberbật tùy chọn ( set +o noclobber).
rozcietrzewiacz

0

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 -fSLxử lý nếu phía máy chủ cung cấp Chuyển hướng 302; các -Rcho phía máy chủ timestamp, -Jxem xét phía máy chủ Content-Disposition, và -Ochuyể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-Modifieddấ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=...'

đó -Nlà 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-dispositionlà xem xét Content-Dispositiontiê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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.