標準入力で提供されたファイルからアーカイブ(tar.gz、...)を生成します。

標準入力で提供されたファイルからアーカイブ(tar.gz、...)を生成します。

アーカイブ内でファイル名を指定しながら、stdinを介して提供されたファイルから圧縮アーカイブを自動的に作成したいと思います(まだ存在しない場合はアーカイブを作成します)。

7zipには、私が望む機能を正確に実行する機能があるようです()。

使い方はこんな感じです。

cat some_file.png | 7z a archive.7z -t7z -si"custom_filename1.png"

これにより、archive.7z に「custom_filename1.png」というファイルが追加されます。しかし、可能であれば7zipなしでこれを実行したいと思います。なぜなら、ほとんどのLinuxディストリビューションには7zipがプリインストールされていないからです。 tarを使ってこれを行う方法を検索しましたが、これだけが見つかりました。郵便はがき私のコンピュータでは動作しないようです。

一時ファイルを作成したくありません。

答え1

あなたが望むのは、tar別のコマンドの標準出力から順番にアーカイブにファイルを追加することです。

アーカイブが存在すると仮定すると、次のコマンドを使用して指定されたファイルをアーカイブに追加できます。

tar -u -f archive.tar filename

または圧縮アーカイブを使用する場合

tar -uz -f archive.tar.gz filename

呼び出されたファイルはfilenameファイルシステムに存在する必要があります。これは、ワークフローでファイルを保存してアーカイブに追加し、ファイルを再度削除する必要があることを意味します。

次のように見えます。

somecommand filename.png >newfile1.png &&
tar -u -f archive.tar newfile1.png &&
rm newfile1.png

コマンド間の接続は、&&前のコマンドが何らかの理由で失敗した場合にコマンドが実行されないことを保証します。

既存のファイルと同じ名前のファイルを追加すると、アーカイブの古いファイルは「非表示」になるため、各ファイルを新しい名前でアーカイブに追加する必要があります。

答え2

zipとbashの使用:

cat some_file.png | zip -v --fifo archive.zip /dev/stdin
printf '%s\n' '@ dev/stdin' '@=custom_filename1.png' | zipnote -w archive.zip

# view archive contents:
unzip -l archive.zip

Archive:  archive.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
     5200  2020-09-26 12:41   custom_filename1.png
---------                     -------
     5200                     1 file

tarに言及しましたが、2つの制限事項について説明しました。

  1. パイプから読み込んでアーカイブを生成する - 一時ファイルを生成する必要はありません
  2. 広く使用されているアーカイブツールの使用

「一時ファイルなし」制約は、パイプからアーカイブを生成する必要があることを意味します。 Tarはパイプではなくファイルのみを読み取るため、tarが機能しない可能性があります。

zip --fifoパイプから読み込み、出力をアーカイブにファイルとして保存します。 Zipはtarほど人気が​​ないかもしれませんが、確かに7zよりも人気があります。

zip は /dev/stdin からファイルの内容を読み込みます。

cat some_file.png | zip -v --fifo archive.zip /dev/stdin
    zip warning: Reading FIFO (Named Pipe): /dev/stdin
  adding: dev/stdin (in=39032) (out=1468) (deflated 96%)
total bytes=39032, compressed=1468 -> 96% savings

これにより、内容がファイルsome_file.pngとして保存されます。archive.zipdev/stdin

これにより、保存されたファイルの名前custom_filename1.pngがに変わりますzipnote。この名前変更操作は原子的に行われ、一時ファイルは生成されません。

答え3

圧縮ファイルのfilename出力は次のとおりです。filename.tgz

tar czf filename.tgz filename

ファイルリストに1つ以上のファイルを圧縮します。

tar czf files.tar.gz --files-from ./filelist

同じことだが方法が違う

ls -1b . >./filelist && tar czf ./files.tar.gz --files-from ./filelist

追加ファイルを追加(タールボールを更新)

tar czuf ./files.tar.gz ./newfile

メモ:tarオプションのバージョンによって異なります可能または許可されていません前が必要ハイフン-)

オプション凡例

  • 作る
  • gzip圧縮の使用
  • あなた更新(追加ファイルを追加)
  • F tarファイル名
  • --ファイルソース圧縮/追加するファイルのリストにファイルの内容をインポートする

また見てくださいタールマンページ

ファタイ

答え4

ファイルマネージャに移動してファイルを右クリックし、[圧縮]をクリックして目的のファイル形式に設定すると、この問題を簡単にバイパスできます。

関連情報