아카이브를 디스크에 저장하지 않고 아카이브를 다운로드하고 추출하는 방법은 무엇입니까?


62

주어진 디렉토리에서 아카이브를 다운로드하고 압축을 풀고 싶습니다. 지금까지 내가 한 일이 있습니다.

wget http://downloads.mysql.com/source/dbt2-0.37.50.3.tar.gz
tar zxf dbt2-0.37.50.3.tar.gz
mv dbt2-0.37.50.3 dbt2

대신 디스크에 기록 하지 않고 즉시 아카이브를 다운로드하여 압축을 풀고 싶습니다 tar.gz. 나는이의 출력 파이프에 의해 가능하다고 생각 wget을을 tar하고, 제공 tar대상을하지만 실제로 내가 함께 조각을 넣어하는 방법을 모르겠어요.

답변:


95

wget페이로드를 stdout (flag -O-)으로 출력하고 자체 출력 ( flag )을 억제 하도록 지시하여 수행 할 수 있습니다 -q.

wget -qO- your_link_here | tar xvz -

대상 디렉토리를 지정하려면

wget -qO- your_link_here | tar xvz - -C /target/directory

최신 정보

GNU를 가지고 있다면 tar

wget -qO- your_link_here | tar --transform 's/^dbt2-0.37.50.3/dbt2/' -xvz

한 번에 모든 작업을 수행 할 수 있어야합니다.

-q 조용한

-O - 표준 출력으로 출력


지정된 경로는 다음과 같아야합니다.wget -qO- your_link_here | tar xvz - -C /target/directory
Marslo

어쩌면 사람들에게 tar 대신 wget을 사용하라고 말하면됩니까?
Alexander Mills

wget -qO- <url> | tar -xvz -C <target folder>gnu tar에서 일했습니다.
AlikElzin-kilaka

14

또 다른 옵션은 curl기본적으로 stdout에 쓰는 을 사용 하는 것입니다.

curl -s some_url | tar xvz -C /tmp

2
나는 당신의 선택을 다른 사람들보다 더 좋아하지만curl -s some_url | tar xvz - -C /tmp
5

1
FiftiN가 : - 제안> 예를 들어 하나가 사용할 수있는 저장소 내부 파일의 필터링 된 목록을 볼 수 있습니다$ curl -L https://api.github.com/repos/repo_owner/repo_name/tarball | tar tvfz - -C /tmp --wildcards *.py
알렉스 Glukhovtsev

11

이 oneliner는 트릭을 수행합니다.

tar xvzf -C /tmp/ < <(wget -q -O - http://foo.com/myfile.tar.gz)

짧은 설명 : 괄호의 오른쪽이 먼저 실행됩니다 ( -qwget에게 조용히 지시 -O -하고 출력을 stdout에 쓰는 데 사용됩니다).

그런 다음 Bash의 프로세스 대체 연산자 <(를 사용하여 명명 된 파이프 를 생성하여 명명 된 파이프 를 생성합니다 . 이런 식으로 우리는 임시 파일 디스크립터를 생성 한 다음 <파일 재 지정 연산자를 사용하여 해당 디스크립터의 내용을 tar로 보냅니다 .

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