이 구문에서는 컬을 사용합니다.
curl -o myfile.jpg http://example.com/myfile.jpg
이 명령을 두 번 실행하면 두 개의 파일이 생성됩니다.
myfile.jpg
myfile-1.jpg
파일이 존재하는 경우 해당 파일을 덮어쓰도록 Curl에게 어떻게 알릴 수 있나요?
답변1
-o
파일에 쓰는 옵션을 사용하는 대신 셸을 사용하여 출력을 파일로 지정합니다.
curl http://example.com/myfile.jpg > myfile.jpg
답변2
통과 --clobber
. 여기에는 사용도 포함됩니다 -J
.
답변3
나는 같은 문제가 있었고 서버 측이 반환하는 것과 관계없이 동일한 파일 이름을 재사용하고 싶었습니다. 귀하의 경우 다음을 통해 파일 이름을 얻을 수 있습니다 basename
.
➸ basename 'http://example.com/myfile.jpg'
myfile.jpg
그런 다음 Bash 도우미 함수를 작성할 수 있습니다. 예를 들면 다음과 같습니다.
➸ function download { name="$(basename $1)"; curl "$1" > "$name"; }
➸ download 'http://example.com/myfile.jpg'
Content-Disposition
그러나 내 경우에는 파일 이름이 제목이 있는 URL의 일부도 아니었습니다 . Curl을 사용하는 명령줄은 다음과 같습니다.
➸ curl -fSL -R -J -O 'http://example.com/getData.php?arg=1&arg2=...'
원하는 경우 무시할 수 있습니다 -fSL
. 서버 측 반환 사례를 처리합니다 302 Redirection
. 관련 플래그는 다음과 같습니다.
-R
서버측 타임스탬프용-J
서버 측 고려Content-Disposition
-O
터미널에 덤프하는 대신 다운로드 동작으로 전환
그러나 파일 이름이 존재하는 경우 덮어쓰기를 거부합니다. 서버 측 Last-Modified
타임스탬프가 최신이면 덮어쓰고 싶습니다.
그래서 나는 다음과 같은 작업을 수행하는 wget 솔루션을 사용하게 되었습니다.
➸ wget -NS --content-disposition 'http://example.com/getData.php?arg=1&arg2=...'
-N
서버 측 타임스탬프를 확인하고 서버 측에 새 버전이 있는 경우에만 덮어쓰는 것입니다.--content-disposition
Content-Disposition
제목을 고려해야합니다- wget의 기본 동작은 서버 측에 제공된 파일 이름으로 다운로드하는 것입니다.
귀하의 경우 타임 스탬프에 신경 쓰지 않는다면 다음과 같습니다.
➸ wget -O myfile.jpg http://example.com/myfile.jpg