Shell-Script
用於分離和移動橫向和縱向圖像的 Shell 腳本
我有一個
jpg
圖像目錄。是否有一個 shell 腳本(bash
或者zsh
可以接受)將所有風景圖像移動到一個目錄中,並將所有肖像圖像移動到另一個目錄中?
您可以將
imagemagick
’sidentify
與fx
特殊運算符一起使用來比較高度和寬度,例如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
您可以使用字元串e
glob 限定符(僅選擇引號之間的程式碼返回的文件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