2012-06-29 37 views
1

我有原始圖像中的目錄結構,看起來像這樣:我應該如何使用位於多個子目錄中的原始圖像批量縮略圖?

./Alabama/1.jpg 
./Alabama/2.jpg 
./Alabama/3.jpg 
./Alaska/1.jpg 
...the rest of the states... 

我想所有的原始圖像轉換成縮略圖,這樣我就可以在網站上顯示出來。有點挖/試驗後,我想出了以下Linux命令:

find . -type f -iname '*.jpg' | sed -e 's/\.jpg$//' | xargs -I Y convert Y.jpg -thumbnail x100\> Y-small.jpg 

它遞歸地查找所有的JPG圖像在我的子目錄,刪除文件類型(.JPG)從他們身上,所以我可以將其重命名之後,然後將它們製作成縮略圖,並在文件類型之前添加'-small'來重命名它們。

它適用於我的目的,但它有點複雜,它不是很健壯。例如,我不知道如何在文件名的開頭插入'small-'(所以./Alabama/small-1.jpg)。

問題:

  1. 是否有從位於多個子目錄圖像創建縮略圖的更好,更可靠的方法?
  2. 我可以使現有命令更加健壯(例如,但使用sed在保存之前重命名輸出的縮略圖 - 基本上修改Y-small.jpg部分)。

回答

3

無需構建這樣一個複雜的構造。首先製作小塊,然後連接。

我已決定不是在文件名中間插入-small。它使一切變得更加複雜。最好使用前綴(更簡單的代碼,也更容易從拇指派生原始文件名),它可以是thumbsDir/thumbsPrefix-

#!/bin/sh 

make_thumbnail() { 
    pic=$1 
    thumb=$(dirname "$1")/thumb-$(basename "$1") 
    convert "$pic" -thumbnail x100 "$thumb" 
} 

# Now we need a way to call make_thumbnail on each file. 
# The easiest robust way is to restrict on files at level 2, and glob those 
# with */*.jpg 
# (we could also glob levels 2 and 3 with two globs: */*.jpg */*/*.jpg) 

for pic in */*.jpg 
do 
    make_thumbnail "$pic" 
done 
相關問題