Design a site like this with WordPress.com
Get started

Only rm something that exists

If you’re writing scripts for macOS management, it is inevitable that you’ll need to delete something. Maybe you generated a temp folder or maybe deletion is the entire purpose of the script.

Here is a trick to avoid nasty accidents with your rm commands. This should work in bash or zsh:

#!/bin/zsh

function rm_if_exists()
{
    #Only rm something if the variable has a value and the thing exists!
    if [ -n "${1}" ] && [ -e "${1}" ];then
        rm -r "${1}"
    fi
}

rm_if_exists $fileToBeDeleted

This simple function tests to see whether path given is a defined variable, and that it actually exists, prior to deleting it. If the given path isn’t defined or doesn’t exist, it won’t process the rm -r command.

If you want a more verbose output, you can add an else statement:

#!/bin/zsh

function rm_if_exists()
{
    #Only rm something if the variable has a value and the thing exists!
    if [ -n "${1}" ] && [ -e "${1}" ];then
        rm -r "${1}"
    else
        echo "File doesn't exist: ${1}"
    fi
}

rm_if_exists $fileToBeDeleted

Other Methods

Another method to accomplish the same goal is to use variable expansion. Using variable expansion you can cause your entire script to exit if you have a faulty variable (which might be great if you’re scripting the deletion of data.)

These methods are more advanced, and better explained by folks smarter than me. See this great blog post by Stefan Judis where they cover it: https://www.stefanjudis.com/today-i-learned/how-parameter-expansion-helps-to-not-delete-everything/

Advertisement

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