.NET을 사용하여 HTTP를 통해 웹사이트에서 파일을 다운로드하려고 합니다 wget
.
내가 사용할 때 :
wget http://abc/geo/download/?acc=GSE48191&format=file
나는 단지 하나의 이름을 얻습니다 index.html?acc=GSE48191
.
내가 사용할 때 :
wget http://abc/geo/download/?acc=GSE48191&format=file -o asd.rpm
알겠습니다 asd.rpm
만 실제 이름으로 다운로드하고 싶고 다운로드한 파일의 이름을 수동으로 변경하고 싶지 않습니다.
답변1
wget --content-disposition 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'
다운로드 중인 파일은 tar
웹 서버의 동적 링크를 통해 제공되는 아카이브(바이너리 파일)입니다. wget
일반적으로 파일을 저장하는 데 사용하는 URL의 일부를 사용하지만 이 경우 이는 단지 REST API 엔드포인트(또는 이와 유사한 것)이므로 이름이 사용하기 쉽지 않습니다(여전히 유효한 이름이며 파일 내용은 동일합니다).
그러나 이 경우 서버는 실제 파일 이름이 포함된 "콘텐츠 처리" 헤더를 제공하며, wget
해당 옵션을 사용하면 이를 사용할 수 있습니다 --content-disposition
. 이 옵션은 내 매뉴얼에 "실험적"으로 표시되어 있습니다 wget
.
또한 쉘이 URL 에 포함된 &
앰퍼샌드 ?
문자를 해석하지 않도록 URL을 인용해야 합니다.
동등한 것을 사용하십시오 curl
:
curl -J -O 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'
또는 동등한 긴 옵션을 사용하십시오.
curl --remote-header-name --remote-name 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'
파일을 다운로드한 후 압축을 풀어야 합니다.
tar -xvf GSE48191_RAW.tar
이 특정 아카이브가 생성된 방식으로 인해 아카이브된 파일이 다음 위치로 추출됩니다.현재의디렉토리(따라서 새 디렉토리를 생성하고 해당 디렉토리로 아카이브를 이동한 후 압축을 푸는 것이 좋습니다). 이 아카이브의 파일은 gzip
압축된 CEL
파일입니다.
답변2
쉘은 일반적인 방법으로 문자를 해석합니다. 특히 ?
와일드카드(여기서는 중요하지 않음)와 &
"배경에 넣기"로 해석합니다. 쉘 응답이 직접 명령과 다르기 때문에 후자를 알아차렸어야 합니다.
따라서 다음을 인용해야 합니다.
wget 'http://abc/geo/download/?acc=GSE48191&format=file'