在 crontab 中执行 Mogrify 命令,同时确保文件不会被重复处理

在 crontab 中执行 Mogrify 命令,同时确保文件不会被重复处理

我有一个用于提供内容的图像文件夹,其中包含 jpeg、jpg 和 gif 文件。会一直自动添加更多文件。

我打算将以下命令添加到 crontab(当然带有适当的文件路径)

mogrify -质量 80% "*.jpg"

mogrify-质量 80%“*.jpeg”

mogrify -质量 80% "*.gif"

我想恭敬地问一下,是否有人知道这些命令是否最终会多次处理文件,因此当文件转换为 80% 时,下次 cron 运行时它会进一步减少它等等......

ImageMagick 是否确保它不会处理同一个文件两次?如果不行,我该如何处理这个问题,因为我无法重命名文件。

我们将非常感谢社区的任何帮助。

谢谢。

已编辑:感谢用户 Sven 提供的以下答案。这是我现在正在使用的似乎有效的脚本:

谢谢。初步看来,mogrify 可以就地写入。

我将使用这个脚本:

#!/bin/bash

watchedFolder=[insert path here]
quality=70

while [ true ]
do
fileName=$(inotifywait -q -e create --format "%f" "$watchedFolder")
sleep 1s
mogrify -quality 80% "$watchedFolder/$fileName"
sleep 2s
echo "Processed " $fileName
sleep 2s
done

答案1

魔法精灵将要每次调用它时,它都无法识别该文件是否已被处理。毕竟,你告诉它“处理所有 jpg 文件”,所以这是完全正常和预期的。

有很多方法可以解决这个问题,具体取决于您的具体情况。

  • 您可以为您的 cron 作业编写一个包装器,它将保存已处理的文件列表并仅处理新文件。这在大多数情况下都有效,但也是最不优雅和最复杂的解决方案。
  • 采用命名方案。重命名小文件并使用排除小版本的通配符。
  • 改变你的工作流程。将新文件放在暂存区,并将较小的文件写入最终目标。
  • 检查是否mogrify可以就地写入(而不是写入新文件然后删除旧文件)。如果可以,则使用它inotifywatch来了解新文件并在新文件到达时对其进行处理。就地写入在此方法中很重要,否则在写出缩减版本inotifywatch时也会看到一个新文件。mogrify

相关内容