如何更有效地調整多個子目錄中的影像大小?

如何更有效地調整多個子目錄中的影像大小?

我的目錄結構中有原始圖像,如下所示:

./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 部分)。

答案1

如果它始終只是您位置下方的一級目錄,您可以嘗試以這種方式循環:

for dir in *; do
  [ ! -d "$dir" ] && continue; # skip non-directory entries, i.e. additional files
  cd "$dir"
  for file in *.jpg; do
    convert -thumbnail x100 "$file" "small-${file}" # creates e.g. small-1.jpg
  done
done

相關內容