ฉันใช้ curl ในไวยากรณ์นี้:
curl -o myfile.jpg http://mysite.com/myfile.jpg
หากฉันรันคำสั่งนี้สองครั้งฉันจะได้รับสองไฟล์:
myfile.jpg
myfile-1.jpg
ฉันจะบอก CURL ได้อย่างไรว่าฉันต้องการให้มันเขียนทับไฟล์หากมีอยู่?
ฉันใช้ curl ในไวยากรณ์นี้:
curl -o myfile.jpg http://mysite.com/myfile.jpg
หากฉันรันคำสั่งนี้สองครั้งฉันจะได้รับสองไฟล์:
myfile.jpg
myfile-1.jpg
ฉันจะบอก CURL ได้อย่างไรว่าฉันต้องการให้มันเขียนทับไฟล์หากมีอยู่?
คำตอบ:
ใช้:
curl http://mysite.com/myfile.jpg > myfile.jpg
noclobber
เปิดใช้งานตัวเลือก ( set +o noclobber
)
ฉันพบปัญหาเดียวกันและฉันต้องการใช้ชื่อไฟล์เดิมซ้ำอีกครั้งไม่ว่าฝั่งเซิร์ฟเวอร์จะให้อะไรในกรณีของคุณคุณอาจได้รับชื่อไฟล์ด้วย basename
➸ basename 'http://mysite.com/myfile.jpg'
myfile.jpg
จากนั้นคุณสามารถเขียนฟังก์ชัน bash ของผู้ช่วยเช่น:
➸ function download { name="$(basename $1)"; curl "$1" > "$name"; }
➸ download 'http://mysite.com/myfile.jpg'
แต่ในกรณีของฉันชื่อไฟล์ไม่ได้เป็นส่วนหนึ่งของ URL มันมาพร้อมกับการจัดการเนื้อหา ด้วย curl บรรทัดคำสั่งคือ
$ curl -fSL -R -J -O 'http://some-site.com/getData.php?arg=1&arg2=...'
คุณอาจเพิกเฉย-fSL
มันจัดการถ้าฝั่งเซิร์ฟเวอร์ให้เปลี่ยนเส้นทาง 302; -R
สำหรับเซิร์ฟเวอร์ด้านประทับเวลา-J
ที่จะต้องพิจารณาด้านเซิร์ฟเวอร์Content-Disposition
และ-O
ที่จะเปลี่ยนพฤติกรรมการดาวน์โหลดแทนการทุ่มตลาดใน terminal;
อย่างไรก็ตามยังคงมีความทุกข์ที่ไม่ยอมเขียนทับหากมีชื่อไฟล์อยู่ ฉันต้องการให้มันเขียนทับหากการLast-Modified
ประทับเวลาฝั่งเซิร์ฟเวอร์ใหม่กว่า;
จบลงด้วยโซลูชั่น wget ที่สามารถทำได้:
$ wget -NS --content-disposition 'http://some-site.com/getData.php?arg=1&arg2=...'
-N
คือการตรวจสอบเซิร์ฟเวอร์ tiemstamp ด้านข้างและเขียนทับเฉพาะเมื่อมีด้านเซิร์ฟเวอร์รุ่นใหม่; --content-disposition
คือการพิจารณาContent-Disposition
ส่วนหัว; และพฤติกรรมเริ่มต้นของ wget คือการดาวน์โหลดไปยังชื่อไฟล์ที่กำหนดจากฝั่งเซิร์ฟเวอร์
ในกรณีของคุณถ้าคุณจะไม่สนใจการประทับเวลาก็แค่
$ wget -O myfile.jpg http://mysite.com/myfile.jpg
curl
เวอร์ชันใดของระบบใด