Bash脚本 - 如何仅调整最近未修改的图像?

时间:2017-07-17 19:56:35

标签: bash image shell scripting

我正在编写一个bash脚本,它将减少给定目录中的所有图像文件大小。将在其中执行此目录的目录专用于仅在我们的服务器上进行图像上载。

到目前为止我这样做的方式是脚本将检查Argument 1中指定的目录中的所有文件,并查看该文件是否是目录。如果它不是目录,则它将继续使用magick -resize减小文件大小。

但是,我在这里遇到了两个问题。首先是我不想调整已经调整大小的图像。第二个问题是我不想调整已经很小的图像。我可以告诉脚本只调整最近未修改过的图像吗?对此有更好的安全措施吗?我如何指定只调整大于某些尺寸的图像(即1024 x 968等)?如果以前已经问过这些,请原谅我。这是我的第一个剧本,我无法找到任何专门回答我问题的内容而不会让我感到困惑。

curr_dir=$1

for filepath in "$curr_dir"*
  do
      if [ ! -d "${filepath}" ]; then
          magick "$filepath" -resize 10% "$filepath"
          echo "$filepath has been reduced"
      else
          if [ -d "${filepath}" ]; then
          echo "$filepath is a directory and cannot be reduced."
          fi
      fi
  done
exit

1 个答案:

答案 0 :(得分:2)

  

我可以告诉脚本只调整最近未修改过的图像吗?

不确定。如果您可以定义精确的时间跨度"最近"。

  

对此有更好的安全措施吗?

例如,如果您只想调整大于1024 x 968,的图像,调整大小的结果会使图像小于1024 x 968,那么相同的图像将永远不会再次调整大小,因为它不符合要求。

您可以使用以下命令检查图像的尺寸:

convert /path/to/image -format "%w %h" info:

这将打印宽度和高度,以一个空格分隔。

您可以在脚本中使用此功能,例如:

if [ -f "$filepath" ]; then
    set -- $(convert "$filepath" -format "%w %h" info:)
    width=$1
    height=$2
    if ((width > 1024)) || ((height > 968)); then
        magick "$filepath" -resize 10% "$filepath"
        echo "$filepath has been reduced"
    else
        echo "$filepath is already small ($width x $height)"
    fi
else
    echo "$filepath is a not a file and cannot be reduced"
fi