tar.gzファイル内にゼロサイズのtar.gzファイルが見つかりました


0

私の現在のディレクトリはこのような単一のファイルを含みます -

$ls -l
-rw-r--r--    1 root     staff             8 May 28 09:10 pavan

さて、私はこのファイルをtarしてgzipしたいです。

$tar -cvf - *  2>/dev/null |gzip -vf9 > pavan.tar.gz 2>/dev/null

(私は元のファイルと同じディレクトリにzipファイルを作成していることに気付いています)

上記のtar / gzipコマンドを約20回実行すると、数回、最終的なtarファイルとzipファイルが削除されます。 pavan.tar.gz ファイルのサイズは0です pavan.tar.gz ファイル。私はこのゼロサイズのファイルがどこからアーカイブに入ってくるのかわからない。

注意 :既存のtar.gzファイルに対してtar / gzipコマンドを実行していません。コマンドを実行する前に、ディレクトリにファイルが1つしかないことを常に確認します。 説明したように、グーグルについて ここに 、私は作成されているtar.gzもアーカイブされているファイルの一部であったと思われる。しかし私の場合は、 gzip 最終的なファイルを作成している人、そしてその時までに gzip 走る、 tar ターリングをする必要があります。

これはAIXで起こっていますが、私は問題がプラットフォームに依存しないと思うので、私はもっと注意を引くためにLinuxタグも使いました。

回答:


1

あなたは "パイプ"コマンドを入力しています。インタプリタ(bashなど)がパイプを作成し、2つのコマンドを実行します(2つのプロセスを生み出します - tar&gzip)。この手順ではbashは複数回フォークしていますが、ターゲットファイルがターゲットファイルの場合は未定義です。 pavan.tar.gz 前後に作成される * 拡大 tar コマンド。


答えてくれてありがとう。 gzipはtarの出力を操作することになっているので、最初にtarを実行しないでください。あなたは私にパイプで接続されているコマンドで実装定義の方法で生み出されることができると言ういくつかの標準的なドキュメントを私に指摘してもらえますか?
Pavan Manjunath

ここで@PavanM doc msgstr "パイプラインの各コマンドはそれ自身のサブシェルで実行されます..."#:。そのため、シェルは複数回(この場合は2回)フォークし、指定されたコマンドを実行します(そして必要なものはすべて拡張します)。これらの新しいプロセスは、実行の順序についてとにかく保護されているわけではありません - それらはパイプによって接続されているだけです。
palo

0

ファイルが1つしかなく、時間が経つにつれて変更される可能性があるため心配しないでください。

cat pavan | gzip -f9 > pavan.gz 

追加コメント:

一緒に仕事をするなら bash あなたが試すことができます 選択を無効にする そう !(pavan.tar.gz) すべてのファイルを選択しますが pavan.tar.gz

 tar -zcf pavan.tar.gz !(pavan.tar.gz)  

やがて --ignore-command-error


-1

なぜ-vを使用してからdev / nullにリダイレクトするのか理解できません。次のように-vとdev / nullを削除します。

tar -cf - * | gzip -f9> pavan.tar.gz

画面には何も表示されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.