wget을 통해 실제 이름의 파일을 다운로드합니다.

wget을 통해 실제 이름의 파일을 다운로드합니다.

.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'

관련 정보