주어진 디렉토리에서 아카이브를 다운로드하고 압축을 풀고 싶습니다. 지금까지 내가 한 일이 있습니다.
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)
짧은 설명 : 괄호의 오른쪽이 먼저 실행됩니다 ( -q
wget에게 조용히 지시 -O -
하고 출력을 stdout에 쓰는 데 사용됩니다).
그런 다음 Bash의 프로세스 대체 연산자 <(
를 사용하여 명명 된 파이프 를 생성하여 명명 된 파이프 를 생성합니다 . 이런 식으로 우리는 임시 파일 디스크립터를 생성 한 다음 <
파일 재 지정 연산자를 사용하여 해당 디스크립터의 내용을 tar로 보냅니다 .