web-dev-qa-db-ja.com

stdin経由で指定されたファイルからアーカイブ(tar.gz、...)を作成します

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

7Zipには、私が求めていることを正確に実行する機能があるようです( dok )。

使用法は次のとおりです。

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

これにより、「custom_filename1.png」というファイルがarchive.7zに追加されます。ただし、7ZipはほとんどのLinuxディストリビューションにプリインストールされていないと思うので、可能であれば7Zipなしでこれを実行したいと思います。 tarでこれを行う方法を探しましたが、これだけが見つかりました post これは私のマシンでは機能しないようです。

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

1
lug_wrench

あなたがやりたいと思われることは、他のコマンドの標準出力から、ファイルをtarアーカイブに1つずつ追加することです。

アーカイブが存在すると仮定すると、を使用して特定のファイルをアーカイブに追加できます。

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

&&コマンド間では、前のコマンドが何らかの理由で失敗した場合にコマンドが実行されないようにします。

既存のファイルと同じ名前のファイルを追加すると、アーカイブ内の古いファイルが「非表示」になるため、新しい名前の各ファイルをアーカイブに追加する必要があることに注意してください。

1
Kusalananda

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

追加のファイルで追加(tarballの更新)

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

注:tarオプションのバージョンによって異なりますmayまたは前にハイフン-

オプションの凡例

  • c作成
  • zgzip圧縮を使用
  • u更新(ファイルを追加)
  • ftarファイル名
  • -files-fromパック/追加するファイルのリストのファイルの内容を取得します

tarのマニュアルページ も参照してください。

HTH

0
somebody

ファイルマネージャに移動してファイルを右クリックし、[圧縮]をクリックして、任意のファイルタイプにすることで、これを簡単に回避できます。

0
Ishan