this post was submitted on 25 Aug 2025
20 points (100.0% liked)

Linux Questions

2485 readers
50 users here now

Linux questions Rules (in addition of the Lemmy.zip rules)

Tips for giving and receiving help

Any rule violations will result in disciplinary actions

founded 2 years ago
MODERATORS
 

Using a shell script, can I watch a folder and block program execution until a file in a certain folder changes?

top 12 comments
sorted by: hot top controversial new old
[–] helloworld@lemmy.ml 10 points 17 hours ago

After some suggestions to check out inotifywait I ended up with a solution that works for me as desired.

inotifywait --event modify,create ./targetfolder/; echo "new change, that I am interested in, occurred in targetfolder";

It turned out I was interested in both file modification and file creation events.

[–] MyNameIsRichard@lemmy.ml 13 points 19 hours ago

There is inotifywait which seems to do the job, The Wiki

[–] jellyfish@beehaw.org 3 points 16 hours ago* (last edited 16 hours ago)

The simplest solution is entr, I use it a lot for development - https://www.linuxbash.sh/post/entr-rerun-commands-when-files-change

[–] 6nk06@sh.itjust.works 5 points 19 hours ago

Maybe inotify or one of those "watcher" (not "watch") tools available, but I don't remember which one to use.

[–] possiblylinux127@lemmy.zip 2 points 16 hours ago (1 children)
[–] helloworld@lemmy.ml 2 points 16 hours ago* (last edited 16 hours ago) (1 children)

a hobby project: generate a rss feed based on recent file changes in a directory. But I thought this can also have many applications …

  • auto formatting code files on change
  • automatic backups of a certain folder: run rsync on change in folder.
[–] possiblylinux127@lemmy.zip 4 points 15 hours ago

Are you familiar with CI/CD pipelines? You could use Git along with a service like Woodpecker CI or Gitlab Runners.

[–] running_ragged@lemmy.world -1 points 19 hours ago (3 children)

Can continuously loop over the file, examine the md5 hash for changes.

Run the script if it has changed.

https://stackoverflow.com/questions/6475252/bash-script-watch-folder-execute-command

daemon() {
chsum1=""

while [[ true ]]
do
    chsum2=`find src/ -type f -exec md5 {} \;`
    if [[ $chsum1 != $chsum2 ]] ; then           
        if [ -n "$chsum1" ]; then
            compile
        fi
        chsum1=$chsum2
    fi
    sleep 2
done
}
[–] chonkyninja@lemmy.world 4 points 18 hours ago

The fuck…

[–] testfactor@lemmy.world 2 points 18 hours ago

Even if you wanted to implement a solution like this, which you shouldn't, why on earth monitor the MD5 sum instead of just the mtime of the file???? Like, doing a checksum is the least efficient method of checking this possible.

Like, you could do a simple while loop with a find myfile.txt +mmin 1; sleep 30 in it. Adjust numbers to your desired tolerance.

Again, don't do that. But if you must, definitely don't do an md5sum for godssake.

[–] helloworld@lemmy.ml -1 points 19 hours ago

I really like this, replace compile with whatever command you desire I guess.

[–] Shadow@lemmy.ca 0 points 19 hours ago* (last edited 19 hours ago)

Block execution not entirely. You could chmod it as non-x and use inotifywatch to flip it back.

Edit: I misunderstood you, use inotifywait like the other person suggested.