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

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

이 구문에서는 컬을 사용합니다.

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-dispositionContent-Disposition제목을 고려해야합니다
  • wget의 기본 동작은 서버 측에 제공된 파일 이름으로 다운로드하는 것입니다.

귀하의 경우 타임 스탬프에 신경 쓰지 않는다면 다음과 같습니다.

➸ wget -O myfile.jpg http://example.com/myfile.jpg

관련 정보