アーカイブ内でファイル名を指定しながら、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
コマンド間の接続は、&&
前のコマンドが何らかの理由で失敗した場合にコマンドが実行されないことを保証します。
既存のファイルと同じ名前のファイルを追加すると、アーカイブの古いファイルは「非表示」になるため、各ファイルを新しい名前でアーカイブに追加する必要があります。