web-dev-qa-db-ja.com

Linuxでファイルのリストを圧縮する方法

1つのディレクトリに圧縮する必要のあるファイルがたくさんあります。ディレクトリ内のすべてのファイルを圧縮するのではなく、特定のクエリに一致するファイルのみを圧縮します。

やった

grep abc file-* > out.txt 

各ファイルに「abc」のすべてのインスタンスを含むファイルを作成します。ファイル自体が必要です。それらのファイルのみをZipにbashに伝えるにはどうすればよいですか?

18
john mangual

非常にシンプル:

Zip archive -@ < out.txt

つまり、out.txtファイルに1行に1つのファイル名が含まれている場合です。 out.txtのすべてのファイルをarchive.Zipという1つのアーカイブに追加します。

-@オプションは、ZipをSTDINから読み取ります。

一時的なout.txtファイルの作成をスキップする場合は、grepの機能を使用してファイル名を印刷することもできます。 -rは再帰検索を有効にし(場合によっては不要な場合があります)、-lはファイル名のみを出力します。

grep -rl "abc" file-* | Zip archive -@
33
slhck

ここ からの受け入れられた回答の代替:

cat out.txt | Zip -@ zipfile.Zip
cat out.txt | Zip -@ - > zipfile.Zip
zip zipfile.Zip $(cat out.txt) -r
Zip zipfile.Zip -r . [email protected]