Contents

压缩来自 stdin的数据

1. 概述

有时我们想在从stdin读取数据时直接压缩文件。但是,我们不想在压缩文件之前先将数据写入文件。原因之一是节省空间。

在这个简短的教程中,我们将讨论在从stdin读取数据时使用各种压缩器应用程序压缩文件的方法。

2. stdin读取数据简介

我们可以使用各种压缩应用程序来压缩数据,例如*gzip bzip2zip 等。我们可以通过从文件中读取数据或直接从标准输入中读取数据来压缩数据*。

2.1. 通过为 Compressor 应用程序指定文件名来压缩文件

通常,我们提供文件名作为压缩器应用程序的参数。例如,要使用*zip *压缩文件:

$ zip -0 archive.zip file1

这里,file1参数是文件的文件名。我们将文件压缩成archive.zip

但是,有时我们可能想从标准输入读取数据立即压缩它,而无需先将数据写入文件。

要了解如何做到这一点,让我们回顾一下我们如何从stdin读取数据。

2.2. stdin读取数据

在压缩数据之前,我们不必先将数据写入文件。这在从管道中的大型处理器压缩数据时很有用。例如,mysqldump 将数据库的 SQL 语句备份到stdout。大多数时候,我们希望直接压缩输出,而不是将未压缩的版本存储在临时文件中。

我们可以使用破折号“-”管道stdin读取数据。

rev命令反转字符串。它接受一个文件名作为参数:

$ echo hello > /tmp/hello.txt 
$ cat /tmp/hello.txt 
hello
$ rev /tmp/hello.txt 
olleh

但是rev也可以通过管道接受来自标准输入的数据:

$ cat /tmp/hello.txt | rev
olleh

我们还可以通过在控制台中输入数据来从stdin读取数据:

$ rev

然后我们输入hello并按 Enter 键:

$ rev
hello
olleh

rev命令从stdin读取数据,我们手动输入并随后处理数据。

现在让我们看看如何使用gzipxzbzip27zzip压缩来自stdin的数据。

3. 使用gzip压缩来自stdin的数据

我们可以使用带有管道和*>gzip *压缩数据:

$ cat /tmp/hello.txt | gzip > hello.gz

这里我们首先使用cat显示*/tmp/hello.text的内容。然后我们使用 | 将该数据重定向到gzip*命令。

然后,gzip压缩管道中的数据并将其放入stdout

最后,我们使用*>stdout定向 到hello.gz*中。

4. 使用xz压缩来自stdin的数据

我们可以使用带有管道的*xz >*来压缩数据:

$ cat /tmp/hello.txt | xz > hello.xz

这与我们之前的示例相同。

5. 使用bzip2压缩来自stdin的数据

我们可以使用带有管道和*>的*bzip2 压缩数据:

$ cat /tmp/hello.txt | bzip2 > hello.bz2

这也与我们之前的示例相同。

6. 使用7z压缩来自stdin的数据

我们可以使用带有管道的*7z *压缩数据。但是,我们还需要一些额外的命令行选项:

$ cat /tmp/hello.txt | 7z a -si hello.7z

我们显示了*/tmp/hello.txt的内容,然后我们将数据重定向到7z命令。最后,7z使用-si选项压缩数据,这意味着从stdin*读取数据。a选项表示添加内容。

7. 使用zip压缩来自stdin的数据

zip 要求我们使用破折号“-”作为输入文件名,以指示它应该从stdin读取。

$ cat /tmp/hello.txt | zip hello.zip -

我们显示了*/tmp/hello.txt的内容,然后我们将数据重定向到zip命令。最后,zip压缩数据并使用**破折号“-”从stdin*读取数据。**