
違いは何ですか?同じように行われますか?
tar -czf files/compressed/gzip/archive.tar.gz -C files/original .
tar -c -C files/original . | gzip -1 > files/compressed/gzip/archive.tar.gz
答え1
いくつかのテストをしましょう。
tar
ホロ:
time sh -c 'tar -czf test.tar.gz ~/Downloads'
tar: Removing leading `/' from member names
=====
JOB sh -c 'tar -czf test.tar.gz ~/Downloads'
74% cpu
30.02s real
20.64s user
1.82s sys
tar
次にパイプgzip
:
time sh -c 'tar -c ~/Downloads | gzip -1 > test.tar.gz'
tar: Removing leading `/' from member names
=====
JOB sh -c 'tar -c ~/Downloads | gzip -1 > test.tar.gz'
65% cpu
27.23s real
16.07s user
1.88s sys
パイプラインはマルチコアシステム(私のCPUは2つ)で並列に実行されるため、tar
パイプラインが高速になることがわかります。gzip
答え2
前者の場合、tarの実装はgzipライブラリを使用して圧縮自体を実行します。後者の場合、tarの出力は圧縮を実行する別々の実行可能ファイルにパイプされます。前者はパイプにデータを書き込んだり、パイプからデータを読み取ったりする追加のシステムコールを含まないため、少し効率的ですが、人々はおそらく違いを感じません。
答え3
2番目のオプションには、実行する必要がある2つのアプリケーションがあります(tar
およびgzip
)。これには追加の時間が必要です。パイプラインには追加のリソースも必要です。これにより実行時間が長くなります。