Quick Tip #6: Triggering Actions on File Close

Sometimes it’s useful to trigger an action after a file is closed. Suppose you started a lengthy download on your notebook and you want to suspend it as soon as the download is done. There are several ways to achieve this.

If you started the download using a web browser like Chrome, the file will be renamed as soon as it is done. You can run a simple shell loop that waits until the file doesn’t exist anymore:

# while [ -e file.part1.zip ]; do sleep 1; done; pm-suspend

When downloading using a command line tool like wget that doesn’t rename downloaded files, you can use the fuser Linux utility to check if the downloaded file is still open. If it isn’t, the download is done:

# while fuser -s file.zip; do sleep 1; done; pm-suspend

Things get more complicated if there are multiple files involved and you want a solution that both handles file closes and renames. This is what I have come up with:

# sleep-while-open.sh file1 file2 file3; pm-suspend

And here’s the sleep-while-open.sh script:

#! /bin/sh
while [ $STATUS = open ]; do
    for F in "$@"; do
	if [ -e "$F" ] && fuser -s "$F"; then
    sleep 1

Note that for the pm-suspend to work, you either have to run your commands in a root shell or use sudo. Since you won’t be there to enter the password, you’ll need to give your user permissions to run /usr/sbin/pm-suspend in /etc/sudoers.

This entry was posted in shell and tagged , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s