1. 概要

stdinからデータを読み取っているときにファイルを直接圧縮したい場合があります。 ただし、圧縮する前に最初にデータをファイルに書き込む必要はありません。 その理由の1つは、スペースを節約することです。

この短いチュートリアルでは、 stdin からデータを読み取りながら、さまざまなコンプレッサーアプリケーションでファイルを圧縮する方法について説明します。

2. stdinからのデータ読み取りの概要

gzip bzip2 zipなどのさまざまなコンプレッサーアプリケーションを使用してデータを圧縮できます。 ファイルからデータを読み取るか、stdinから直接データを読み取ることでデータを圧縮できます。

2.1. Compressorアプリケーションにファイル名を付けてファイルを圧縮する

通常、コンプレッサーアプリケーションの引数としてファイル名を提供します。 たとえば、zipを使用してファイルを圧縮するには次のようにします。

$ zip -0 archive.zip file1

ここで、file1引数はファイルのファイル名です。 ファイルをarchive.zipに圧縮しています。

ただし、 stdin からデータを読み取り、最初にデータをファイルに書き込まずにすぐに圧縮したい場合があります。

これを行う方法を理解するために、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 は、パイプを使用してstdinからのデータを受け入れることもできます。

$ cat /tmp/hello.txt | rev
olleh

コンソールにデータを入力して、stdinからデータを読み取ることもできます。

$ rev

次に、 hello と入力して、Enterキーを押します。

$ rev
hello
olleh

rev コマンドは、手動で入力した stdin、からデータを読み取り、後でデータを処理しました。

次に、 stdinのデータをgzip xz bzip2 7z 、およびzip

3. stdinからのデータをgzipで圧縮する

パイプと>gzipを使用してデータを圧縮できます。

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

ここでは、最初にcatを使用して/tmp/hello.textのコンテンツを表示しました。 次に、そのデータを|を使用してgzipコマンドにリダイレクトしました。 次に、 gzip パイプからのデータを圧縮し、stdoutに配置しました。最後に、stdouthello.gzにhello.gzを使用して送信しました。 X151X]>。

4. stdinからのデータをxzで圧縮する

パイプと>xzを使用してデータを圧縮できます。

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

これは、前の例と同じように機能します。

5. stdinからのデータをbzip2で圧縮する

パイプと>bzip2を使用して、データを圧縮できます。

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

これも前の例と同じように機能します。

6. stdinからのデータを7zで圧縮する

パイプで7zを使用してデータを圧縮できます。 ただし、いくつかの追加のコマンドラインオプションも必要です。

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

/tmp/hello.txt の内容を表示してから、データを7zコマンドにリダイレクトしました。 最後に、 7z は、 -si オプションを使用してデータを圧縮しました。これは、stdinからデータを読み取ることを意味します。 a オプションは、コンテンツを追加することを意味します。

7. stdinからzipを使用してデータを圧縮する

zip では、 stdin から読み取る必要があることを示すために、入力ファイル名としてダッシュ「-」を使用する必要があります。

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

/tmp/hello.txt の内容を表示してから、データをzipコマンドにリダイレクトしました。 最後に、 zip はデータを圧縮し、ダッシュ「-」を使用してstdinからデータを読み取りました。

8. 結論

この記事では、さまざまな圧縮ツールを使用してstdinからデータを圧縮する方法について説明しました。 gzip xz bzip2 7z 、およびzipについて説明しました。

ほとんどのコマンドはパイプを使用してソースからツールのstdinにデータを送信し、>stdoutからの出力を送信することを確認しました。ファイルに。 ただし、一部のツールでは、出力ファイルを引数として指定したり、stdinから読み取るようにパラメーターを要求したりできることがわかりました。