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

Linux Questions

2862 readers
33 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?

you are viewing a single comment's thread
view the rest of the comments
[–] running_ragged@lemmy.world -2 points 2 months ago (4 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
}
[–] hperrin@lemmy.ca 15 points 2 months ago

Oh god please don’t do this. Constantly reading the file is just stressing your IO for no reason.

Please inotify instead:

https://linux.die.net/man/1/inotifywait

[–] chonkyninja@lemmy.world 4 points 2 months ago
[–] testfactor@lemmy.world 2 points 2 months 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 2 months ago (1 children)

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

[–] hperrin@lemmy.ca 10 points 2 months ago (1 children)

This is a terrible solution. You will stress your IO for no reason.

[–] helloworld@lemmy.ml 0 points 2 months ago* (last edited 2 months ago) (3 children)

On the upside, you do not need to install the inotifywait package. md5sum already installed on my system haha

[–] hperrin@lemmy.ca 11 points 2 months ago

If you are a big fan of wasting disk performance, CPU cycles, and ultimately power.

[–] possiblylinux127@lemmy.zip 2 points 2 months ago

It isn't a terrible solution if you are checking infrequently just as ever 30 minutes.

[–] nublug@lemmy.blahaj.zone 2 points 2 months ago (1 children)
[–] helloworld@lemmy.ml 1 points 2 months ago (2 children)

I do not need to install anything/can work on bare install without internet connection?

[–] possiblylinux127@lemmy.zip 1 points 2 months ago* (last edited 2 months ago)

You should be able to tie into the kernel with some C programming if you want to go extra small.

[–] nublug@lemmy.blahaj.zone 1 points 2 months ago