特定のフォルダで行われた変更に基づいてスクリプトをどのように実行できますか?

特定のフォルダで行われた変更に基づいてスクリプトをどのように実行できますか?

特定の画像のサイズを変更するには、次のコマンドを使用します。

mogrify -geometry x50 my_image.png

新しい印刷画面を撮るたびに、画像はマイ~/Picturesフォルダに保存されます。私のPicturesフォルダを監視し、画像の新しい縮小版を自分のコンピュータの別のフォルダにコピーする作業を実行するスクリプトを作成したいと思います。たとえば~/.icons/...

この問題に対する解決策が利用可能であることを知っていますが、cron定期的に対策を講じたくありません。ログなどに基づいてフォルダの違いを把握できるコマンド(またはスクリプト)が必要です。それは可能ですか?どうすればいいですか?

答え1

私は私の問題を解決するためにこの機能的なスクリプトを作成しましたinotify-tools。それで、他の人に役立つ場合に備えてここに残しておきます。

#!/bin/bash

watchedFolder=~/Pictures
iconsFolder=~/.icons
imageGeometry=100

while [ true ]
do
   fileName=$(inotifywait -q -e create --format "%f" "$watchedFolder")
   if ! [ -d $iconsFolder ]; then mkdir -p $iconsFolder ; fi
   sleep 1s
   cp $watchedFolder/"$fileName" $iconsFolder
   mogrify -geometry x$imageGeometry $iconsFolder/"$fileName"
done

たとえば、保存し~/automatedIcons.bashて実行可能にしますchmod +x ~/automatedIcons.bash。これで実行するとすでに機能し、Picturesフォルダ内に作成されたすべての新しい写真を新しい場所にコピーしてサイズを変更します。起動時に実行するには、crontab -e上記のスクリプトの場所を含む行を使用して作成します@reboot /home/myUserName/automatedIcons.bash


これは単に関数スクリプトです。そのため、仕組みを改善するための提案がある場合は、コメントに自由に書き留めてください。

答え2

この質問(または同様の質問)が次の場所に投稿されました。スタックオーバーフロー

デフォルトでは、以下を使用する必要があります。イノティファイツール

関連情報