grep用于目录中的多个文件名

时间:2015-08-05 20:53:24

标签: bash grep

我有一个文件(让我们称之为images.txt) - 每行都是一个图像路径。即

"images/dashboard/unit4A/lesson1.png"
"images/dashboard/unit4A/lesson2.png"
"images/dashboard/unit4A/lesson3.png"
"images/dashboard/unit4A/lesson4.png"
"images/dashboard/unit4A/lesson5.png"

我想grep整个目录(app)以查看是否在该目录中的HTML,CSS或JS文件中的任何位置提到了每个图像路径。

我试过了 grep -F -f images.txt app / * 但它抱怨app / *有子目录,而且,它并没有完全符合我的要求(我不需要找到图像的实际行 - 我只需要知道,对于每个图像,无论是否存在)

因此示例输出可能如下所示:

"images/dashboard/unit4A/lesson1.png" - found
"images/dashboard/unit4A/lesson2.png" - not found
"images/dashboard/unit4A/lesson3.png" - found
"images/dashboard/unit4A/lesson4.png" - not found
"images/dashboard/unit4A/lesson5.png" - found

只返回未找到的图像列表也是可以接受的。

使用grep有一个很好的方法吗?

1 个答案:

答案 0 :(得分:2)

您可以xargs使用递归 grep,如下所示:

xargs -I % grep -ilR '%' /app/ --include={*.html,*.css,*.js} < images.txt

编辑根据已编辑的问题,您可以执行以下操作:

while read -r pat; do
   printf "%s - " "$pat"
   grep -iqR "$pat" /app/ --include={*.html,*.css,*.js} && echo "found" || echo "not found"
done < images.txt