stdinからのデータを使用してファイルを圧縮する
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に配置しました。最後に、stdoutをhello.gzに
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から読み取るようにパラメーターを要求したりできることがわかりました。