我正在尝试找到一种方法来执行以下操作(Google 仅返回查找的结果):
将指定尺寸(例如 1920x1080、宽度小于 1600 等)的所有文件类型(.jpg、.png 或 .gif 等)的图像从当前目录移动到另一个目录
删除当前目录中所有指定尺寸的图像。
答案1
这会将尺寸为 1920x1080 的所有 jpg、png 或 gif 文件从当前目录移动到targetdir
:
#!/bin/bash
shopt -s nullglob
for fname in *.jpg *.png *.gif
do
read width height < <(exiv2 "$fname" 2>&1 | awk '/^Image size/{print $4,$6}')
[ "$width" ] || continue
[ "$width" -eq 1920 ] && [ "$height" -eq 1080 ] && mv "$fname" targetdir/
done
这将查看当前目录并删除所有宽度小于 1600 的 jpg、png 或 gif 图像:
#!/bin/bash
shopt -s nullglob
for fname in *.jpg *.png *.gif
do
read width height < <(exiv2 "$fname" 2>&1 | awk '/^Image size/{print $4,$6}')
[ "$width" ] || continue
[ "$width" -lt 1600 ] && rm "$fname"
done
这使用exiv2
实用程序捕获图像大小。在类似 Debian 的系统上,exiv2
可以通过运行 进行安装。经过少量修改,可以使用apt-get install exiv2
类似的实用程序,例如 ImageMagick 的。identify
此脚本需要bash
。
怎么运行的
shopt -s nullglob
忽略缺失的文件类型。
for fname in *.jpg *.png *.gif; do
这将开始循环遍历目录中名称以 、 和 结尾的
.jpg
所有.png
文件.gif
。read width height < <(exiv2 "$fname" 2>&1 | awk '/^Image size/{print $4,$6}')
这将使用该
exiv2
实用程序提取图像大小。由于exiv2
会产生几行输出,awk
因此可用于选择我们需要的信息。[ "$width" ] || continue
如果我们没有从上述命令中恢复图像大小,则跳过此文件。例如,如果该文件实际上不是图像文件,就会发生这种情况。
[ "$width" -lt 1600 ] && rm "$fname"
如果图片宽度符合我们的条件,则执行
rm
删除该文件。done
这标志着循环的结束。