Jak mogę określić, że curl (za pomocą wiersza poleceń) zastępuje plik, jeśli już istnieje?

11

Używam curl w tej składni:

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

Jeśli uruchomię to polecenie dwa razy, otrzymam dwa pliki:

myfile.jpg
myfile-1.jpg

Jak mogę powiedzieć CURL, że chcę zastąpić plik, jeśli istnieje?

cwd
źródło
6
Nie można odtworzyć: jaka curlwersja w którym systemie?
enzotib

Odpowiedzi:

22

Posługiwać się:

curl http://mysite.com/myfile.jpg > myfile.jpg
cjc
źródło
2
A wcześniej upewnij się, że nie masz noclobberwłączonej opcji ( set +o noclobber).
rozcietrzewiacz
0

Napotkałem ten sam problem i chcę ponownie użyć tej samej nazwy pliku niezależnie od strony serwera, w twoim przypadku możesz uzyskać nazwę pliku według basename

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

możesz napisać funkcję bash pomocnika, taką jak:

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

ale w moim przypadku nazwa pliku nie jest nawet częścią adresu url, lecz zawiera dyspozycję zawartości; z curl wierszem poleceń jest

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

możesz zignorować te -fSLuchwyty, jeśli po stronie serwera nastąpi przekierowanie 302; -Rna stronie serwera znacznika czasu, -Jaby rozważyć stronie serwera Content-Disposition, i -Oaby przejść do pobierania zachowania zamiast antydumpingowe na terminalu;

jednak nadal cierpi z powodu odmowy zastąpienia, jeśli nazwa pliku istnieje; Chcę go zastąpić, jeśli Last-Modifiedznacznik czasu po stronie serwera jest nowszy;

kończy się rozwiązaniem wget, które potrafi to zrobić:

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

-Njest sprawdzenie po stronie serwera tiemstamp i nadpisać tylko po stronie serwera ma nową wersję; --content-dispositionrozważa Content-Dispositionnagłówek; a domyślnym zachowaniem wget jest pobieranie, na nazwę pliku podaną po stronie serwera.

w twoim przypadku, jeśli nie obchodzi Cię znacznik czasu, to po prostu

$ wget -O myfile.jpg http://mysite.com/myfile.jpg
użytkownik5672998
źródło