如何将 grep 生成的每个文件放入 zip 文件中
Posted
技术标签:
【中文标题】如何将 grep 生成的每个文件放入 zip 文件中【英文标题】:How put every files result by a grep into a zip file 【发布时间】:2022-01-12 18:42:30 【问题描述】:我正在搜索包含 string1 和 string2 的每个 txt 文件
grep -rnE --include='*.txt' 'string1|string2'
现在我想将所有这些文件放入一个 zip 文件中。
谢谢
编辑 @anubhava 建议的这个脚本对我有用
grep --null -rlE --include='*.txt' 'string1|string2' | xargs -0 -I zip test.zip ''
【问题讨论】:
【参考方案1】:您可以使用grep
中的-l
选项仅输出文件名并将其通过管道传送到xargs
以为每个找到的罚款创建zip
:
grep --null -rlE --include='*.txt' 'string1|string2' |
xargs -0 -I zip ''.zip ''
注意在xargs
中使用--null
选项和-0
来处理带有空格、特殊字符的文件名。
要创建包含每个匹配文件的单个 zip 文件,请使用:
grep --null -rlE --include='*.txt' 'string1|string2' |
xargs -0 zip test.zip
【讨论】:
谢谢,这个命令会在每个文件夹中创建一个类似于 mytextfile.txt.zip 的 zip 文件,其中已在文件中找到“string1|string2”。我想在根文件夹(我在其中启动命令)中创建一个包含与我的 grep 匹配的每个文件的单个 zip。非常感谢 ok 使用这个命令对我有用 grep --null -rlE --include='*.txt' 'string1|string2' | xargs -0 -I zip test.zip '' 谢谢 创建单个 zip 使用grep --null -rlE --include='*.txt' 'string1|string2' | xargs -0 zip test.zip
会更高效【参考方案2】:
因为您想要同时包含 string1 和 string2
的文件$ files=""; for i in *.txt; do if grep -q string1 $i && grep -q string2 $i; then files="$files $i"; fi; done
$ zip files.zip $files
更简洁的版本
files="";
for i in *.txt;
do
if grep -q string1 $i && grep -q string2 $i; then
files="$files $i";
fi;
done
zip files.zip $files
演示:
$ cat SO/file1.txt
there is string1
there is also string2
$
$ cat SO/file2.txt
there is just string1
$
$ cat SO/file3.txt
here we have both string1 and string2
$
$
$ files="";
$ for i in SO/*.txt;
> do
> if grep -q string1 $i && grep -q string2 $i; then
> files="$files $i";
> fi;
> done
$ zip files.zip $files
adding: SO/file1.txt (deflated 26%)
adding: SO/file3.txt (deflated 11%)
$
【讨论】:
嗨 Vijayendar Gururaja,当我运行此脚本时,我收到此错误 xxxxxxxx:~/testzipemail$ ./testgrep.sh grep: *.txt: No such file or directory zip 错误:无事可做! (文件.zip) 添加了一个演示来回答。您需要确保 for 循环具有您的文本文件的路径。在演示中,我的 txt 文件位于 /SO/*.txt 下。您可以改为更新所需的路径。为了可移植性,您还可以将其转换为函数以接受路径和逗号分隔的字符串作为脚本参数,以便您可以像 ./script.sh /my/folder/path/*.txt string1,string2,stringX 一样运行它。 感谢 Vijayendar Gururaja 的回答,但我认为单行命令比 bash 脚本更好;-)以上是关于如何将 grep 生成的每个文件放入 zip 文件中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python zipfile 将文件放入 zip 存档中
使用 7zip 命令将目录中的文件归档到单个 zip [关闭]