我想从XCode项目中删除所有未使用的图像,为了做到这一点,我使用以下脚本:
#!/bin/sh
PROJ=`find . -name '*.xib’ -o -name '*.[mh]'`
for png in `find . -name '*.png'`
do
name=`basename $png`
if ! grep -q $name $PROJ; then
rm –Rf "$png"
echo "$png is not referenced"
fi
done
上面的脚本运行正常并删除了项目中未在“ .xib ”中引用的所有图像,但是有一个问题。
问题
该脚本还会删除“ .m ”文件中引用的图像。 (以编程方式设置的图像)
请求
您能告诉我如何在搜索中添加“ .m ”和“ .xib ”文件。
PROJ=`find . -name '*.xib’ -o -name '*.[mh]'`
答案 0 :(得分:1)
首先,不是您使用rm -Rf
删除单个图片。小心!这会以递归方式移除而不强制它,因此它可能存在风险并删除您不想要的内容。可能更好地说rm
。
你的脚本非常整洁有序。为了使其更加健壮,在变量中使用引号总是好的。这样,它还将支持带空格的名称。也就是说,如果你想删除名为“a b.png”的文件,并且名称存储在变量$png
中,说rm $png
你运行rm a b.png
,那么它会尝试删除a
和b.png
。
在完成所有这些介绍之后,让我们关注这里的具体问题。
您好像正在寻找以.xib
或m
结尾的文件。 find . -name '*.xib’ -o -name '*.[mh]'
语法似乎没问题,但使用regex in find
可能会更好。
find -type f -regex '.*\.\(xib\|m|h\)'
最后,您使用for
循环来查看find
的结果。请注意,您也可以说:
while IFS= read -r png;
do
# things with "$png"
done < <(find ...)
但我不会在此处提出任何其他建议,因为我并未真正遵循这些.xib
,.png
文件的逻辑。如果你能展示一个例子,我会更新我的答案。