检查iOS工程imageset图片缺失(shell版)

接到需求的时候就用shell写了 , 结果4000个文件要检测七八分钟

然后用python实现了 ,只用了不到2秒........这差距

需求背景: 要检查imageset里面2x图和3x图的缺失问题

检查指标:
1.imageset里面的Contents.json 里, 是否2x和3x都有对应的filename
2.有filename的情况下,imageset里是否有对应的图片

毕竟不是专门写shell的 , 如果有更优化的写法, 欢迎各位大佬指教

shell解析json比较麻烦 , 下面有2种 1.利用python 2.利用jq库
brew install jq

直接上代码:
#!/bin/sh


# find . -name '*.fb' -type f -print -exec rm -rf {} \;

#############################  分割线    [ 全局变量 ] ###################################

CHECK_PATH=$1 #要检查的路径
WHITELIST=$2 #白名单

echo 检查路径:${CHECK_PATH}
echo 白名单:${WHITELIST}

#############################  分割线    [ 自定义方法 ] ###################################

function check2x3x()
{
    contents_path=$1
    # echo $contents_path



    # 1.查 @2x 和 @3x的 filename是否存在
    # content=`cat $contents_path`
    # lens=`echo $content| python3 -c "import sys, json; data = json.load(sys.stdin); print(len(data['images']))"`
    # # echo $lens
    # for (( j = 0; j < $lens; j++ )); do
    #   filename=`echo $content| python3 -c "import sys, json; print(json.load(sys.stdin)['images'][$j].get('filename'))"`
    #   # echo $filename
    #   if [[ $filename == None ]]; then
    #       # echo "空"
    #       #filename 为空
    #       scale=`echo $content| python3 -c "import sys, json; print(json.load(sys.stdin)['images'][$j]['scale'])"`    
    #       echo "路径: $contents_path  ,Content.json文件缺少 @${scale} 图片的 filename"  >> checkImg_result.txt
    #   else
    #       # echo "非空"
    #       #filename 不为空 就检查对应图片是否存在
    #       #拼图片路径
    #       imageset_dir=`dirname $contents_path`
    #       imgPath=${imageset_dir}/${filename}
    #       if [[ ! -f $imgPath ]]; then
    #           echo "路径: ${imageset_dir}  ,缺少 ${filename} 图片"  >> checkImg_result.txt              
    #       fi

    #   fi

    # done


# 1.查 @2x 和 @3x的 filename是否存在

    content=`cat $contents_path`
    lens=`echo $content | jq '.images' | jq length`
    # echo $lens
    # echo lens:$lens
    for (( j = 0; j < $lens; j++ )); do
        filename=`echo $content | jq ".images[${j}]" | jq '.filename'`
        # echo $filename
        if [[ $filename == None ]]; then
            # echo "空"
            #filename 为空
            scale=`echo $content | jq ".images[${j}]" | jq '.scale'`
            echo "路径: $contents_path  ,Content.json文件缺少 @${scale} 图片的 filename"  >> checkImg_result.txt
        else
            # echo "非空"
            #filename 不为空 就检查对应图片是否存在
            #拼图片路径
            imageset_dir=`dirname $contents_path`
            imgPath=${imageset_dir}/${filename}
            if [[ ! -f $imgPath ]]; then
                echo "路径: ${imageset_dir}  ,缺少 ${filename} 图片"  >> checkImg_result.txt              
            fi

        fi

    done


    # 2.查scale是否缺失  [不用做]

    # 3.查对应的图片是否存在



    # echo $contents

    # lens=`cat $contents_path| python3 -c "import sys, json; data = json.load(sys.stdin); print(len(data['images']))"`
    # echo 数组数量:$lens
    # sizes=(1x 2x 3x)

    # for (( j = 0; j < $lens; j++ )); do
    #   # echo $i
    #   size=`cat $contents_path| python3 -c "import sys, json; print(json.load(sys.stdin)['images'][$j]['scale'])"`
    #   # echo $size
    #   sizes=( ${sizes[*]/$size} )

    # done
    # echo "移除数组结束"

    # # echo ${sizes[*]}

    # for (( k = 0; k < ${#sizes[@]}; k++ )); do
    #   echo "路径: $contents_path  ,Content.json文件缺少 ${sizes[k]} 图片"  >> checkImg_result.txt
    # done;

    # echo 写入文件结束
     

}



#############################  分割线    [ 流程 ] ###################################

#判断要检查的路径是否正确
if [[ ! -d $CHECK_PATH ]]; then
    echo "\033[31m ERROR : 要检查的不是一个路径 , 程序退出 \033[0m"
    exit 0
fi


#加载白名单 ,拼接查找命令
#有参数,且存在
find_command_line="find $CHECK_PATH"
if [[ ! -z $WHITELIST ]] && [[ -f $WHITELIST ]]; then
    echo 白名单存在
    content=`cat whitelist.txt`
    content=(${content})
    for((i = 0; i < ${#content[@]}; i++)); do
        echo 白名单目录$i:${content[i]}
        find_command_line="$find_command_line -path ${content[i]} -prune -o"
    done;
    find_command_line="$find_command_line -name *.imageset -type d -print"
else
    find_command_line="find $CHECK_PATH -name *.imageset -type d"
fi


#删除之前的记录
if [ -f checkImg_result.txt ];then
    echo "文件不存在"
    rm checkImg_result.txt
fi

#获取所有的 xxx.imageset
imageset_paths=`$find_command_line`

#转换一下, 要不不是数组
imageset_paths=(${imageset_paths})





#遍历路径
contents_json_len=${#imageset_paths[@]}
echo 文件个数:${#imageset_paths[@]}
for((i = 0; i < ${#imageset_paths[@]}; i++)); do

    imageset_path=${imageset_paths[i]}
    #拼接 Content.json路径
    contents_json_path=${imageset_path}/Contents.json
    # echo Content路径:$contents_json_path

    #通过路径检查是否缺失@2x 或者 @3x 的图片
    check2x3x $contents_json_path
    echo 进度:$i/$contents_json_len
    # echo "\n"
done;


open checkImg_result.txt



上一篇: 检查iOS工程imageset图片缺失(python版)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容