随着项目的维护,工程中会多多少少有一部分compile bundle resources的图片文件没有在代码中引用,想要删除这些没用的文件,工作量巨大,想要手动删除几乎已经不可能,于是乎翻了一些脚本的贴子,写下了一段简单的脚本,废话不多说直接上源码。
ack="/Users/houyunpeng/bin/ack"
path="/Users/houyunpeng/Desktop/ios-jlc/Resources"
for i in $(find $path -name *.png -o -name *.jpg);do
#echo $i;
file=$(basename -s .png $i | xargs basename -s @2x | xargs basename -s @3x)
result=$($ack -i $file)
# echo $result;
if [ -z "$result" ];then
echo $i;
fi
done
首先需要你安装ack工具,一个非常轻量化的工具,个人觉得部分功能要比grep好用,安装方法可以参考ack官网。
不想看英文的这里有个简单的安装方法,直接在终端输入一下命令就可以
curl https://beyondgrep.com/ack-2.22-single-file > ~/bin/ack && chmod 0755 ~/bin/ack
在这里,由于我的MacBook Air的根路径下安装了太多的工具,于是我把ack安装到了用户的根路径~/bin下,并在.bash_profile配置文件中配置了一个别名alias ack='/Users/houyunpeng/bin/ack'。
好了,核心工具已经就绪,接下来就要开始屠(删)杀(除)图片啦。
其实脚本很简单,
find $path -name *.png -o -name *.jpg 这句命令主要目的是为了找到所有的png和jpg格式的文件,具体格式可以根据你的具体需要而定,其输出的是图片文件的绝对路径,我们需要使用basename命令将图片文件名过滤出来
basename -s .png $i | xargs basename -s @2x | xargs basename -s @3x
这句话是过滤出所有的1x、2x、3x图片
找到具体某一个图片之后,我们需要使用ack命令来查找当前路径下的项目源码中有没有引用该图片
if [ -z "$result" ];then
echo $i;
fi
然后判断$ack -i $file我们搜索出来的结果中,有没有包含代码片段,如果含有代码片段择说明该图片是有引用的,如果没有则使用-z参数来判断参数是不是为空。
好啦,既然已经找到哪些文件没有使用,就可以尽情的删除啦。