アーカイブ内でファイル名を指定しながら、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つの制限事項について説明しました。
- パイプから読み込んでアーカイブを生成する - 一時ファイルを生成する必要はありません
- 広く使用されているアーカイブツールの使用
「一時ファイルなし」制約は、パイプからアーカイブを生成する必要があることを意味します。 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.zip
dev/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
ファイルマネージャに移動してファイルを右クリックし、[圧縮]をクリックして目的のファイル形式に設定すると、この問題を簡単にバイパスできます。