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

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

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대상을하지만 실제로 내가 함께 조각을 넣어하는 방법을 모르겠어요.



답변

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 - 표준 출력으로 출력


답변

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

curl -s some_url | tar xvz -C /tmp


답변

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

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

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

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


답변