从 wget 到 tar 的流管道

Анд*_*ити 4 tar wget

我想下载 Linux 内核并一步解压它。有很多关于它的手册。所以我尝试:

\n
$ wget  https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz | tar -xav -C /home/a/myKernel/\n--2023-05-06 03:04:38--  https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz\nResolving cdn.kernel.org (cdn.kernel.org)... 146.75.49.176, 2a04:4e42:7c::432\nConnecting to cdn.kernel.org (cdn.kernel.org)|146.75.49.176|:443... connected.\nHTTP request sent, awaiting response... 200 OK\nLength: 136934448 (131M) [application/x-xz]\nSaving to: \xe2\x80\x98linux-6.3.1.tar.xz\xe2\x80\x99\n\nlinux-6.3.1.tar.xz                                          100%[========================================================================================================================================>] 130.59M  9.08MB/s    in 14s     \n\n2023-05-06 03:04:52 (9.32 MB/s) - \xe2\x80\x98linux-6.3.1.tar.xz\xe2\x80\x99 saved [136934448/136934448]\n\ntar: This does not look like a tar archive\ntar: Exiting with failure status due to previous errors\n
Run Code Online (Sandbox Code Playgroud)\n

我也尝试过:

\n
$ aria2c https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz | tar -xz -C /home/a/myKernel/\n\ngzip: stdin: not in gzip format\ntar: Child returned status 1\ntar: Error is not recoverable: exiting now\n
Run Code Online (Sandbox Code Playgroud)\n

每次我都会遇到错误。但这两个命令工作正常:

\n
$ wget  https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz\n$ tar xavf linux-6.3.1.tar.xz\n
Run Code Online (Sandbox Code Playgroud)\n

如何使用单个命令下载并解压 Linux 内核?

\n

Sté*_*las 11

使用 GNU tar,tar xf file.tar.xz调用xz -d解压缩文件上的文件,但由于某种原因,这不适用于-.

切换到 libarchivebsdtar会起作用:

wget -qO- https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz |
  bsdtar xvf -
Run Code Online (Sandbox Code Playgroud)

但你也可以xz -d自己调用:

wget -qO - https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz |
  xz -d |
  tar xvf -
Run Code Online (Sandbox Code Playgroud)

这适用于任何tar实施。

GNUtar手册有:

读取存档时必须指定解压缩选项的唯一情况是从不支持随机访问的管道或磁带驱动器读取。然而,在这种情况下,GNU“tar”将指示您应该使用哪个选项。例如:

$ cat archive.tar.gz | tar tf -
tar: Archive is compressed.  Use -z option
Run Code Online (Sandbox Code Playgroud)

这里:

$ cat file.tar.xz | tar tf -
tar: Archive is compressed. Use -J option
tar: Error is not recoverable: exiting now
Run Code Online (Sandbox Code Playgroud)

因此,如果使用 GNU tar,您可以显式使用-J--xzfortar来调用xz -d以动态解压缩输入流。

wget -qO- https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz |
  gnu-tar Jxvf -
Run Code Online (Sandbox Code Playgroud)

无论如何,您忘记了-O -withoutwget会将下载的文件存储到本地文件中,而不是将其打印到 stdout (这里是管道 to tar),也许您对默认情况下将下载输出到 stdout 感到wget困惑curl。(quiet) 与's (silent)-q类似,会抑制默认情况下获得的进度信息。curl-s


Gil*_*not 6

像这样:

wget -q -O - https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz |
    tar xJvf -
Run Code Online (Sandbox Code Playgroud)
  • -O在这里定义输出文件STDOUT-
  • -q处于安静模式

然后:

cd linux-6.3.1/
ls -1
Run Code Online (Sandbox Code Playgroud)

arch/
block/
certs/
[...]
Run Code Online (Sandbox Code Playgroud)