Shell-Script

用於分離和移動橫向和縱向圖像的 Shell 腳本

  • February 20, 2021

我有一個jpg圖像目錄。是否有一個 shell 腳本(bash或者zsh可以接受)將所有風景圖像移動到一個目錄中,並將所有肖像圖像移動到另一個目錄中?

您可以將imagemagick’sidentifyfx特殊運算符一起使用來比較高度和寬度,例如h>w. 如果為真則輸出1,如果為假則輸出0

for f in ./*.jpg
do
 r=$(identify -format '%[fx:(h>w)]' "$f")
 if [[ r -eq 1 ]] 
 then
     mv "$f" /path/to/portraits
 else
     mv "$f" /path/to/landscapes
 fi
done

zsh您可以使用字元串eglob 限定符(僅選擇引號之間的程式碼返回的文件true)並執行以下操作:

mv ./*.jpg(.e_'identify -format "%[fx:(h>w)]" $REPLY | grep 0 >/dev/null'_) /path/to/landscapes
mv ./*.jpg /path/to/portraits

所以第一個命令將所有橫向圖像移動到/path/to/landscapes,第二個命令將剩餘圖像移動到/path/to/portraits.


上述解決方案將方形圖像視為風景並將它們移動到相應的目錄中。如果你想將它們移動到它們自己的目錄,你可以引入第二個條件:

mv ./*.jpg(.e_'identify -format "%[fx:(h<w)]" $REPLY | grep 1 >/dev/null'_) /path/to/landscapes
mv ./*.jpg(.e_'identify -format "%[fx:(h>w)]" $REPLY | grep 1 >/dev/null'_) /path/to/portraits
mv ./*.jpg /path/to/squares

或者您可以使用不同的條件(例如檢查h/w比率)將方形圖像與其他圖像分開並將它們保留在目前目錄中:

for f in ./*.jpg
do
 r=$(identify -format '%[fx:(h/w)]' "$f")
 if [[ r -gt 1 ]] 
 then
     mv "$f" /path/to/portraits
 elif  [[ r -lt 1 ]]
 then
     mv "$f" /path/to/landscapes
 fi
done

引用自:https://unix.stackexchange.com/questions/294341