从.tar.bz2存档中的文件中提取行

飞线

我想在一行上使用stdin / stdout来显示.tar.bz2归档文件中文件的版本,而又不影响现有归档文件或保留任何临时文件。该文件只有一行包含版本。

这些命令可以工作,但它们会留下临时文件:

cp /storage/archive.tar.bz2 /tmp/
bunzip2 /tmp/archive.tar.bz2
tar -C /tmp -xvf /tmp/archive.tar dir1/dir2/file
cat /tmp/dir1/dir2/file | grep version

我正在使用的busybox版本具有受限制的命令集:

# bunzip2 --help
BusyBox v1.23.2 (2017-08-22 01:34:50 UTC) multi-call binary.

Usage: bunzip2 [-cf] [FILE]...

Decompress FILEs (or stdin)

        -c      Write to stdout
        -f      Force

# tar -h
BusyBox v1.23.2 (2017-08-22 01:34:50 UTC) multi-call binary.

Usage: tar -[cxtzhvO] [-X FILE] [-T FILE] [-f TARFILE] [-C DIR] [FILE]...

Create, extract, or list files from a tar file

Operation:
        c       Create
        x       Extract
        t       List
        f       Name of TARFILE ('-' for stdin/out)
        C       Change to DIR before operation
        v       Verbose
        z       (De)compress using gzip
        O       Extract to stdout
        h       Follow symlinks
        X       File with names to exclude
        T       File with names to include
用户名

使用管道–在几乎所有最新的操作系统上,管道完全存在于内存中,不需要存储完整的中间数据。

您的tar版本没有-J调用bzip2 / bunzip2选项(它将像在后台那样自动使用幕后管道-z),但是必须-f -从stdin中读取存档。因此,您需要结合:

  1. 告诉bunzip2将输出文件写入stdout:bunzip2 -c <file>
  2. 告诉tar从stdin中读取存档:tar -x -f - ...
  3. 告诉tar将提取的文件写入stdout:tar -O ...
  4. 告诉grep从stdin读取输入。

结果是:

bunzip2 -c /storage/archive.tar.bz2 | tar -x -O -f - dir1/dir2/file | grep version

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档