如何在 Linux 中压缩文件列表

如何在 Linux 中压缩文件列表

我有许多文件需要压缩到一个目录中。我不想压缩目录中的所有文件,而只想压缩与特定查询匹配的文件。

我做到了

grep abc file-* > out.txt 

创建一个文件,其中包含每个文件中所有“abc”的实例。我需要文件本身。我如何告诉 bash 只压缩这些文件?

答案1

很简单的:

zip archive -@ < out.txt

也就是说,如果你的out.txt文件每行包含一个文件名,它会将所有文件添加out.txt到一个名为的档案中archive.zip

-@选项zip从 STDIN 读取。

如果您想跳过创建临时out.txt文件,您grep也可以使用打印文件名的功能。-r启用递归搜索(在您的情况下可能不需要)并-l仅打印文件名:

grep -rl "abc" file-* | zip archive -@

答案2

接受答案的替代方案来自这里

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]

相关内容