天天看點

shell腳本檢索工程未引用的圖檔并删除

随着項目的維護,工程中會多多少少有一部分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參數來判斷參數是不是為空。

好啦,既然已經找到哪些檔案沒有使用,就可以盡情的删除啦。