
我的目錄結構中有原始圖像,如下所示:
./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)。
問題:
- 是否有更好、更強大的方法來從位於多個子目錄中的圖像建立縮圖?
- 我可以讓現有命令更加健壯嗎(例如,但在儲存之前使用 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