如何制作可识别所有.jpg,.gif和.png文件的Bash shell脚本,然后在任何文本文件中识别哪些文件未通过url(),href或src链接在文件夹中?
这是我开始的,但我最终得到了我想要的反转。我不想知道引用的图像,但是未引用(也称为“孤立”)图像:
# Change MYPATH to the path where you have the project
find MYPATH -name *.jpg -exec basename {} \; > /tmp/patterns
find MYPATH -name *.png -exec basename {} \; >> /tmp/patterns
find MYPATH -name *.gif -exec basename {} \; >> /tmp/patterns
# Print a list of lines that reference these files
# The cat command simply removes coloring
grep -Rf /tmp/patterns MYPATH | cat
# great -- but how do I print the lines of /tmp/patterns *NOT* listed in any given
# *.php, *.css, or *.html?
答案 0 :(得分:8)
在drysdam的帮助下,我创建了这个Bash脚本,我将其命名为orphancheck.sh并使用“./orphancheck.sh myfolder”调用。
#!/bin/bash
MYPATH=$1
find "$MYPATH" -name *.jpg -exec basename {} \; > /tmp/patterns
find "$MYPATH" -name *.png -exec basename {} \; >> /tmp/patterns
find "$MYPATH" -name *.gif -exec basename {} \; >> /tmp/patterns
for p in $(cat /tmp/patterns); do
grep -R $p "$MYPATH" > /dev/null || echo $p;
done
答案 1 :(得分:4)
我参加派对有点晚了(我在寻找答案时找到了这个页面),但是如果它对某人有用,这里是一个稍微修改过的版本,它返回带有文件名的路径(并搜索还有一些文件类型):
#!/bin/bash
if [ $# -eq 0 ]
then
echo "Please supply path to search under"
exit 1
fi
MYPATH=$1
find "$MYPATH" -name *.jpg > /tmp/patterns
find "$MYPATH" -name *.png >> /tmp/patterns
find "$MYPATH" -name *.gif >> /tmp/patterns
find "$MYPATH" -name *.js >> /tmp/patterns
find "$MYPATH" -name *.php >> /tmp/patterns
for p in $(cat /tmp/patterns); do
f=$(basename $p);
grep -R $f "$MYPATH" > /dev/null || echo $p;
done
但重要的是要注意,只要像这样静态地查看代码就可以得到误报,因为代码可能会动态创建一个文件,然后引用(并且预期存在)。因此,如果您盲目地删除此脚本返回路径的所有文件,而不了解您的项目,您可能会后悔。
答案 2 :(得分:3)
ls -R *jpg *gif *png | xargs basename > /tmp/patterns
grep -f /tmp/patterns *html
第一行(递归 - 你的问题是错误指定的,所以我认为我会有点一般)使用basename
查找目录部分的所有图像和条带。将其保存在模式列表中。然后grep
在所有html文件中使用该列表。