Command-Line

如何根據特定文件夾上發生的更改執行腳本?

  • June 30, 2018

要更改特定圖像的大小,我使用以下命令:

mogrify -geometry x50 my_image.png

每次我拍攝新的列印螢幕時,都會在我的~/Pictures文件夾中保存一張圖像。我想製作一個腳本來監視我的Pictures文件夾並採取行動將我的新圖像的縮小版本複製到我電腦上的不同文件夾中,例如~/.icons/

我知道我可以使用 來解決這個問題cron,但我真的不想定期採取行動。我想要一個命令(或腳本),它可以根據日誌或類似的東西找出文件夾的不同之處。那可能嗎?我該怎麼做?

我創建了這個功能腳本,使用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.


這只是一個功能腳本。因此,如果有人對改進其工作方式有任何建議,請隨時在評論中寫下。

引用自:https://unix.stackexchange.com/questions/444160