bash - 如何查找和压缩包含字符串的文件?

问题描述 投票:0回答:3

我想将所有包含字符串“12345”的文件压缩到文件mylog.zip。 使用 grep -l 我可以找到该文件并使用此命令,但它不会压缩文件。

grep -l 12345  *  |  zip  mylog.zip; 

我尝试命令

grep -l 12345  *

它找到了文件。问题是如何将其传递给 zip。

bash
3个回答
4
投票
find -name "*12345*" -type f -print | zip name.zip -@

find -name "*12345*" -type f -exec zip name.zip {} +

1
投票

另一个使用 bash

for
循环。如果需要,请在变量周围添加适当的引用。在此示例中,我在一堆文件中 grep 查找
a

$ for f in *.txt; do grep -q a $f; if [ $? -eq 0 ]; then zip my.zip $f ; fi ; done
  adding: test1.txt (stored 0%)
  adding: test3.txt (stored 0%)

写开:

for f in *.txt
do 
    grep -l a $f
    if [ $? -eq 0 ]
    then 
        zip my.zip $f
    fi
done

0
投票

您的命令唯一缺少的是 -@ 选项,它允许 zip 命令从标准输入读取文件列表。

grep -l "12345" * | zip mylog.zip -@

我发现这比使用 find 的解决方案要快得多。就我而言,我也在递归地查看目录。

grep -Rl "12345" . | zip mylog.zip -@
© www.soinside.com 2019 - 2024. All rights reserved.