wget -o는 실패시 빈 파일을 씁니다.


14

wget "no such address"-o "test.html"을 쓰면 먼저 test.html을 만들고 실패 할 경우 비워 둡니다. 그러나 -o를 사용하지 않으면 다운로드가 성공했는지 확인한 후 기다렸다가 파일을 작성합니다.

후자의 동작을 -o에도 적용하고 싶습니다. 가능합니까?

답변:


17

wget URL을 찾을 수 없으면 0이 아닌 종료 상태를 반환하므로 실패시 remove 명령을 추가 할 수 있습니다.

wget "url" -O file || rm -f file

또는 임시 파일을 만들어 성공할 때만 이동하십시오.

wget "url" -O /tmp/wget && mv /tmp/wget file

두 번째는 실패시 기존 파일을 삭제하지 않는 이점이 있지만 man tempfile여러 인스턴스를 병렬로 실행하는 경우 고유 한 임시 이름 (참조 )을 사용해야합니다.


또한 --retry-connrefused를 추가 하면 처음에 빈 파일을 방지하는 데 도움이 될 수 있습니다.
akom

꼭두각시 매니페스트 의 exec 에서 이런 일이 발생하면 => "[-s file]"아닌 경우 == 파일 을 변경 하여 자동 복구 할 수 있습니다.
akom

13

주석에 쓰여 있듯이 오류와 상관없이 항상 파일에 쓰는 wget -O 쉘 리디렉션과 비슷 합니다.

curl -f대신 사용할 수 있습니다 .

curl -f http://nonexistent/file.jpg -o localfile.jpg

파일을 가져 오는 중에 오류가 발생하면 로컬 파일을 건드리지 않습니다.


4

올바른 구문은

wget "url" -O file

대문자 O를 주목하십시오. -o 옵션은 wget에게 로그 파일 을 작성 하도록 지시 합니다. 따라서 실패시에도 항상 기록됩니다.


처음에는 작동한다고 생각했지만 작동하지 않는 것으로 나타났습니다. try wget " host.does.not.exist "-O "emptyFile"오류가 리턴되지만 emptyFile이 작성됩니다.
akurtser

1
@akurtser 당신이 맞아요. wget에게 파일을 만들지 말라고 할 방법이 없다고 생각합니다. mail-archive.com/wget@sunsite.dk/msg08586.html이라는 스레드를 발견했습니다 . 기준은 모든 파일이 실패한다는 wget을 확실하게 할 수 없기 때문에 동일한 파일로 여러 다운로드를 할 수 있다는 것입니다.
Mr Shunz

고마워, 그것은 내가 쓰고있는 bash 스크립트의 일부이므로, 먼저 성공적인 파일의 경우 이름을 바꿀 임시 파일을 저장하려고합니다. 매우 우아하지는 않지만 더 나은 것을 생각할 수는 없습니다.
akurtser

1
@akurtser 확실하게 wget에서 리턴 코드를 확인할 수 있습니다. "찾을 수없는 경우"파일을 삭제할 수 있는지 알려줍니다. 따라서 온도 / 이름 변경이 필요 없습니다.
Mr Shunz

1
-O 옵션은 내용이없는 경우에도 다운로드 한 내용을 파일로 리디렉션하는 리디렉션입니다. 따라서 다운로드에 실패한 경우에도 파일은 항상 작성됩니다.
Quan To

0

도움말 doc (wget -h)에 따르면 --spider 옵션을 사용하여 다운로드 (버전 1.14)를 건너 뛸 수 있습니다.

Download:
  -S,  --server-response         print server response.
       --spider                  don't download anything.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.