Bagaimana saya bisa menentukan ikal itu (melalui baris perintah) menimpa file jika sudah ada?

11

Saya menggunakan curl dalam sintaks ini:

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

Jika saya menjalankan perintah ini dua kali, saya mendapatkan dua file:

myfile.jpg
myfile-1.jpg

Bagaimana saya bisa memberi tahu CURL bahwa saya ingin menimpa file itu jika ada?

cwd
sumber
4
Tidak dapat mereproduksi: curlversi apa pada sistem yang mana?
enzotib

Jawaban:

21

Menggunakan:

curl http://mysite.com/myfile.jpg > myfile.jpg
cjc
sumber
2
Dan sebelumnya, pastikan Anda tidak noclobbermengaktifkan opsi ( set +o noclobber).
rozcietrzewiacz
0

Saya bertemu masalah yang sama dan saya ingin menggunakan kembali nama file yang sama apa pun yang diberikan sisi server, dalam kasus Anda, Anda mungkin mendapatkan nama file dengan basename

➸ basename 'http://mysite.com/myfile.jpg'
myfile.jpg

maka Anda dapat menulis fungsi bash pembantu seperti:

➸ function download { name="$(basename $1)"; curl "$1" > "$name"; }
➸ download 'http://mysite.com/myfile.jpg'

tetapi dalam kasus saya nama file bahkan bukan bagian dari url, ia datang dengan disposisi konten; dengan curl baris perintahnya adalah

$ curl -fSL -R -J -O 'http://some-site.com/getData.php?arg=1&arg2=...'

Anda dapat mengabaikan -fSLitu menangani jika sisi server memberikan 302 Redirection; yang -Runtuk sisi server timestamp, -Juntuk mempertimbangkan sisi server Content-Disposition, dan -Ountuk beralih ke perilaku Download bukannya dumping di terminal;

Namun, itu masih menderita menolak untuk menimpa jika nama file ada; Saya ingin menimpa jika Last-Modifiedtimestamp sisi server lebih baru;

berakhir dengan solusi wget yang dapat melakukannya:

$ wget -NS --content-disposition 'http://some-site.com/getData.php?arg=1&arg2=...'

yang -Nadalah untuk memeriksa server side tiemstamp dan menimpa hanya ketika sisi server memiliki versi baru; --content-dispositionadalah untuk mempertimbangkan Content-Dispositiontajuk; dan perilaku default wget adalah mengunduh, ke nama file yang diberikan dari sisi server.

dalam kasus Anda, jika Anda tidak akan peduli cap waktu, hanya saja

$ wget -O myfile.jpg http://mysite.com/myfile.jpg
pengguna5672998
sumber