用于分离和移动横向和纵向图像的 Shell 脚本

Rap*_*nah 6 shell-script files images mv

我有一个jpg图像目录。是否有一个 shell 脚本(bash或者zsh可以接受)将所有横向图像移动到一个目录中,并将所有纵向图像移动到另一个目录中?

don*_*sti 9

您可以使用带有特殊运算符的imagemagick's来比较高度和宽度,例如。如果为真则输出,如果为假则输出:identifyfxh>w10

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
Run Code Online (Sandbox Code Playgroud)

有了zsh你可以使用e串水珠预选赛(只选择文件,其报价收益率之间的代码true),做一些这样的:

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

所以第一个命令将所有风景图像移动到/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
Run Code Online (Sandbox Code Playgroud)

或者您可以使用不同的条件(例如检查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
Run Code Online (Sandbox Code Playgroud)