如何在 Linux 中压缩文件列表

joh*_*ual 29 zip bash

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

我做了

grep abc file-* > out.txt 
Run Code Online (Sandbox Code Playgroud)

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

slh*_*hck 46

很简单:

zip archive -@ < out.txt
Run Code Online (Sandbox Code Playgroud)

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

-@选项zip从 STDIN 读取。

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

grep -rl "abc" file-* | zip archive -@
Run Code Online (Sandbox Code Playgroud)

  • 我使用 `\` 转义空格和文件中没有引号以及以下内容使其工作:`cat out.txt | 读行时;做 xargs zip archive.zip $line ; 完成` (2认同)
  • 对于使用 mac 的其他人来说,由于搜索引擎索引而来到这里,“-@”选项语法从 10.16 起就可以正常工作,尽管手册页仍然包含有关“not on MacOS”的语言 (2认同)

san*_*lio 5

已接受答案的替代方案,来自此处

cat out.txt | zip -@ zipfile.zip
cat out.txt | zip -@ - > zipfile.zip
zip zipfile.zip $(cat out.txt) -r
zip zipfile.zip -r . -i@out.txt
Run Code Online (Sandbox Code Playgroud)