2013-03-10 47 views
1

我寫了這個簡單的shell腳本來使用imagemagik轉換jpgs。它工作正常,但我想包括PNG,GIF,JPEG等,而通過文件擴展名通過每個迭代的腳本腳本。我更喜歡這種循環查找的方法,這樣我可以更好地報告每個處理過的項目,並允許使用更具可擴展性的腳本來爲每個進程添加其他大小和轉換。 (而不是簡單的convert *命令)。imagemagik目錄轉換文件

有什麼建議嗎?

find cdn/ -name '*.jpg' -print | sort | 
while read f; 
do 
b=$(basename $f .jpg) 
in="${b}.jpg" 
thumb="${b}_150x150.jpg" 
if [ -e $thumb ]; 
then 
true 
else 
convert -resize 150 $in $thumb 
fi 

done 
+1

閱讀'man file':字符串像'file -b --mime-type $ f |如果$ f是圖像文件,sed's | \([^ /] * \)/.* | \ 1 |''將返回「image」。 – 2013-03-10 17:00:23

回答

1

對於「將問題分解爲1」找到文件,2)決定如何處理文件以及3)處理文件,將它分解爲多個部分,然後分別處理。 「如先前所建議。這允許採用更具可擴展性的方法來添加更多的處理。

這樣,您不需要通過擴展傳遞文件。這就是你想要的,通過擴展傳遞文件?你必須這樣做嗎?

此外,

  • 使用-iname '*.jpg'代替-name '*.jpg'這樣做不區分大小寫的搜索。
  • 在查找中使用更多-iname參數以查找所需的所有其他擴展。例如,

    find cdn/ \(-iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.gif' \) -print

即,你會發現你在一個通所需的文件,而不是使用發現遍地找不同擴展名的文件。

1

使它更模塊化,調用第二個腳本來處理圖像文件。

find /path -type f -print | 
while read filename ; do 
    sh /path/to/process_image $filename 
done 

process_image腳本,您可以再選擇基於文件的 擴展名或文件類型什麼事。該腳本可以調用其他腳本,具體取決於你想要根據圖像類型,大小等進行的操作。

將問題分解爲1)查找文件,2)決定如何處理文件以及3)處理文件。使它成爲模塊將把問題分解成可以單獨處理的部分。