1つのディレクトリに圧縮する必要のあるファイルがたくさんあります。ディレクトリ内のすべてのファイルを圧縮するのではなく、特定のクエリに一致するファイルのみを圧縮します。
やった
grep abc file-* > out.txt
各ファイルに「abc」のすべてのインスタンスを含むファイルを作成します。ファイル自体が必要です。それらのファイルのみをZipにbashに伝えるにはどうすればよいですか?
非常にシンプル:
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 -@
ここ からの受け入れられた回答の代替:
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]