Cron

Mogrify crontab 中的命令,同時確保文件不會被處理兩次

  • February 10, 2019

我有一個提供內容的圖像文件夾,它包含 jpeg、jpg 和 gif 文件。更多文件會一直自動添加。

我打算做的是將以下命令添加到 crontab (當然使用適當的文件路徑)

mogrify - 質量 80% “*.jpg”

mogrify -quality 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

IMagick在您呼叫它的任何時候處理任何文件,它無法辨識該文件是否已被處理。畢竟,您告訴它“處理所有 jpg 文件”,所以這是完全正常的,也是意料之中的。

有很多方法可以規避這個問題,具體取決於您的具體情況。

  • 您可以圍繞您的 cron 作業編寫一個包裝器,該包裝器將保留已處理的文件列表並僅處理新文件。這適用於大多數情況,但也是最不優雅和最複雜的解決方案。
  • 採用命名方案。重命名小文件並使用排除小版本的萬用字元。
  • 改變你的工作流程。將新文件放在暫存區,並將較小的文件寫入最終目的地。
  • 檢查是否mogrify可以就地寫入(而不是寫入新文件並在之後刪除舊文件)。如果可以,請用於inotifywatch了解新文件並在它們到達時對其進行處理。在這種方法中,就地寫入很重要,否則在寫出縮減版本inotifywatch時也會看到一個新文件。mogrify

引用自:https://serverfault.com/questions/953224