如何将 grep 生成的每个文件放入 zip 文件中
How put every files result by a grep into a zip file
我正在搜索包含 string1 和 string2 的每个 txt 文件
grep -rnE --include='*.txt' 'string1|string2'
现在我想将所有这些文件放入一个 zip 文件中。
谢谢
编辑
@anubhava 建议的这个脚本对我有用
grep --null -rlE --include='*.txt' 'string1|string2' | xargs -0 -I {} zip test.zip '{}'
您可以在 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
因为您想要同时包含 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%)
$
我正在搜索包含 string1 和 string2 的每个 txt 文件
grep -rnE --include='*.txt' 'string1|string2'
现在我想将所有这些文件放入一个 zip 文件中。
谢谢
编辑 @anubhava 建议的这个脚本对我有用
grep --null -rlE --include='*.txt' 'string1|string2' | xargs -0 -I {} zip test.zip '{}'
您可以在 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
因为您想要同时包含 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%)
$