curl (명령 줄을 통해)이 파일이 이미 존재하는 경우 파일을 덮어 쓰도록 지정하려면 어떻게해야합니까?


11

이 구문에서 curl을 사용하고 있습니다.

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

이 명령을 두 번 실행하면 두 개의 파일이 생성됩니다.

myfile.jpg
myfile-1.jpg

CURL에 파일이 존재하는 경우 파일을 덮어 쓰도록하려면 어떻게해야합니까?


5
재생할 수 없음 : 어떤 curl시스템에서 어떤 버전을 사용합니까?
enzotib

답변:


22

사용하다:

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

2
사전에 noclobber옵션이 활성화되어 있지 않은지 확인하십시오 ( set +o noclobber).
rozcietrzewiacz

0

나는 같은 문제를 만났고 서버 측에서 제공하는 것과 동일한 파일 이름을 재사용하고 싶습니다. 귀하의 경우 파일 이름을 얻을 수 있습니다 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대신 터미널에서 덤핑의 다운로드 동작으로 전환;

그러나 파일 이름이 존재하면 덮어 쓰기를 거부합니다. 서버 측 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.