MacOS – OS X – ‘Clickable’ script to erase files

clickmacosscript

I use Latex to write my documents. Latex creates MANY auxiliary files to compile a document. I often times want to clean my working directory.

When I was working on Windows, I used to keep a .bat file in the working directory that looked like this:

del *.aux
del *.pdf
del *.log
del *.bak
del *.gz
del *.bbl
del *.blg

which I could just click on to get rid of all auxiliary files.

Now, I want to do the same on my Mac. I have created a .sh file like this:

#!/bin/bash

cd `pwd`

echo "Cleaning files..."

rm *.aux
rm *.bak
rm *.bbl
rm *.blg
rm *.gz
rm *.log
rm *.pdf

echo "Done!"

which I know I can run (i.e. invoke from command line), but I cannot click on – which is more convenient because not always I will be using Terminal.

How can I convert this script into a "clickable" one?

I appreciate any input!

Best Answer

Create a text file like this:

#!/bin/bash

cd "$(dirname "${BASH_SOURCE[0]}")" || {
    echo "Error changing directory." >&2
    exit 1
}

echo "Cleaning files..."

rm *.aux
rm *.bak
rm *.bbl
rm *.blg
rm *.gz
rm *.log
rm *.pdf

echo "Done!"

Give it a ".command" extension, and add execute permission to it. This will make it automatically open and run in Terminal when it's double-clicked.

Note that there are two important differences (and one minor one) between this and @thiagoveloso's script:

  • It uses double-quotes around the path it's cding to, which will prevent problems if any directory names contain spaces (which is entirely normal on OS X).
  • It checks for errors while cding, and if there was a problem it exits (rather than deleting files in an unexpected location). Always check for errors on any script command that affects what the rest of the script will do; cd is a good example of this.
  • (Minor) It cds directly to the script's directory (rather than cding there, capturing that location in a variable, then cding there again based on the variable).