wget에서 tar로의 스트림 파이프라인

wget에서 tar로의 스트림 파이프라인

Linux 커널을 다운로드하고 한 단계로 압축을 풀고 싶습니다. 많이있다수동그것에 대해. 그래서 나는 다음을 시도한다:

$ wget  https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz | tar -xav -C /home/a/myKernel/
--2023-05-06 03:04:38--  https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz
Resolving cdn.kernel.org (cdn.kernel.org)... 146.75.49.176, 2a04:4e42:7c::432
Connecting to cdn.kernel.org (cdn.kernel.org)|146.75.49.176|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 136934448 (131M) [application/x-xz]
Saving to: ‘linux-6.3.1.tar.xz’

linux-6.3.1.tar.xz                                          100%[========================================================================================================================================>] 130.59M  9.08MB/s    in 14s     

2023-05-06 03:04:52 (9.32 MB/s) - ‘linux-6.3.1.tar.xz’ saved [136934448/136934448]

tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors

나는 또한 다음을 시도했습니다.

$ aria2c https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz | tar -xz -C /home/a/myKernel/

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

오류가 발생할 때마다. 그러나 다음 두 명령은 잘 작동합니다.

$ wget  https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz
$ tar xavf linux-6.3.1.tar.xz

단일 명령으로 Linux 커널을 다운로드하고 압축을 푸는 방법은 무엇입니까?

답변1

GNU를 사용하면 tar파일 에 있는 파일의 압축을 풀기 tar xf file.tar.xz위한 호출이 xz -d호출되지만 어떤 이유로 -.

libarchive 작업으로 전환 bsdtar:

wget -qO- https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz |
  bsdtar xvf -

xz -d하지만 직접 호출 할 수도 있습니다 .

wget -qO - https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz |
  xz -d |
  tar xvf -

이는 모든 tar구현에 적용됩니다.

GNU tar매뉴얼에는 다음이 있습니다:

아카이브를 읽을 때 압축 해제 옵션을 지정해야 하는 유일한 경우는 무작위 액세스를 지원하지 않는 파이프 또는 테이프 드라이브에서 읽을 때입니다. 그러나 이 경우 GNU "tar"는 사용해야 할 옵션을 나타냅니다. 예를 들어:

$ cat archive.tar.gz | tar tf -
tar: Archive is compressed.  Use -z option

여기:

$ cat file.tar.xz | tar tf -
tar: Archive is compressed. Use -J option
tar: Error is not recoverable: exiting now

따라서 GNU를 사용하는 경우 tar명시적 -J또는 --xzfor 호출을 사용하여 입력 스트림의 압축을 tar동적으로 풀 수 있습니다.xz -d

wget -qO- https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz |
  gnu-tar Jxvf -

어쨌든 다운로드한 파일을 stdout(여기서는 stdout으로 파이프)으로 인쇄하는 대신 로컬 파일에 저장한다는 사실을 잊어버렸을 수도 있습니다. 다운로드가 -O -기본적 wget으로 stdout으로 출력된다는 사실에 tar혼란스러울 수도 있습니다. (quiet) 의 (silent)와 마찬가지로 기본적으로 획득되는 진행 정보를 억제합니다.wgetcurl-qcurl-s

답변2

이와 같이:

wget -q -O - https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz |
    tar xJvf -
  • -O여기에 출력 파일을 정의하십시오 STDOUT.-
  • -q조용한 모드에서

그 다음에:

cd linux-6.3.1/
ls -1

arch/
block/
certs/
[...]

관련 정보