如何根据特定文件夹上发生的更改执行脚本?

如何根据特定文件夹上发生的更改执行脚本?

为了更改特定图像的大小,我使用以下命令:

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

将其另存为 eg~/automatedIcons.bash并使其可执行chmod +x ~/automatedIcons.bash。现在,如果您运行它,它已经可以工作了,它将把Pictures文件夹内创建的每张新图片复制到新位置并更改其大小。要使其在引导时运行,请使用crontab -e并写入一行并在其上写上脚本的位置,例如@reboot /home/myUserName/automatedIcons.bash.


这只是一个功能脚本。因此,如果有人对改进其工作方式有任何建议,请随时在评论中写下。

答案2

这个问题(或类似的问题)已在堆栈溢出

主要是说,你需要使用inotify 工具

相关内容