-1

我的服务器上有许多 JPEG 图像,它们每天都在添加。我需要优化这些图像。

为了优化它,我使用了下一个命令

find . -iname "*.jpg" -exec jpegoptim -m85 --strip-all {} \;

但是 find 命令会查找所有图像,而不仅仅是新图像!我知道,我可以指定 -ctime 和 -mtime 参数,但是当 jpegoptim 优化图像时,图像创建时间会更改为现在!因此我无法为 find 命令指定最后一次修改时间。

我认为,该解决方案是将已处理的文件名保存在文本文件中,并在 find 命令再次运行时排除已处理的文件。

我怎样才能做到这一点?如何在文本文件中添加找到的文件名,以及如何检查下一个路径中文本文件中的文件名?

4

1 回答 1

0

您可以使用inotifywaitinotify -tools(或其他一些inotify前端)来持续监控包含 jpeg 的文件夹,并在上传后立即对其进行转换。

$ inotifywait -mrq --format '%w%f' -e create . | while read file; do
      [ "${file##*.}" = "jpg" ] || continue;
      [ -f "${file}" ] || continue;
      echo "jpegoptim -m85 --strip-all '$file'";
  done

-e create .这会以递归方式 ( ) 监视当前文件夹 ( ) 中的所有文件创建,-r并且您必须自己检查文件扩展名 ( .jpg),如图所示,这意味着如果同一文件夹中有大量非 jpeg 创建,这是不必要的开销。如果这对您来说是个问题,您可以使用该--exclude参数并指定一个否定的正则表达式来过滤掉与所需扩展名不匹配的文件(这很麻烦并且看起来不是很好和直接),或者您可以检查当前来自 git repo 的版本,它提供了一个--include过滤器(v3.14没有它)并且inotifywait只有报告文件已经符合您的条件。

另请注意,这将静默跳过文件名中带有换行符的文件。

于 2013-04-23T09:15:41.963 回答