Oh My Zsh!

So you’ve gotten to know the command-line. You’ve felt like a true hacker and thrown away the mouse long ago. Or maybe not. One thing that always bothered me while using the command-line on my MacBook, was the lack of information given on datatypes. It was just plain text regardless of whether it displayed a directory, an executable or just a simple file. You might be sitting there in front of your Linux computer smirking right now, but most of you are probably thinking “I never knew there was a way to make the command-line better”. Well, there is and thy name is ZSH.

Like bash, zsh is a UNIX shell. Zsh however adds many great features for making your time with the command-line easier. It gets even better. There is an open source framework for zsh named Oh My Zsh which lets you customize your command-line with themes and shortcuts. Say you’re in your Home directory and want to cd to Downloads. It used to be that you had to write three letters before you could tab, because Desktop and Documents share their first letters. Not anymore. Now all you need to do is type cd d and tab your way through. You can even use your directional keys.

As you can see, the directories have now been colored to differentiate them from files. The long address and name has simply been replaced with an arrow, followed by a tilde to let you know you’re in the Home directory. You might also have noticed that I only had to enter ll to get a long list. This is because Oh My Zsh comes with many shortcuts pre-defined. These are only a handful of features that’ll make you even more proficient at using the command-line. Please see our guide on how to install Oh My Zsh to start using it now.

Until next time, keep coding.

What is a Terminal/Shell?

If you’ve already had a go at programming, there’s a good chance you’ve familiarized yourself with the command-line interface (CLI or Shell).

This is an example of the macOS CLI, Terminal.

Command-lines are the most powerful tool you have on your computer. It allows you to go places and do stuff otherwise not allowed. The reason why programmers are introduced to command-lines in the first place is usually because they have compilers built into them. A compiler is what translates your code into instructions your computer can understand and run. We won’t go into detail on compilers right now because Python, our current language of choice, doesn’t need to be compiled. You only need to create a python file like so:

test.py

Then, using the bash (the most commonly used shell), you navigate to the files’ location and type

python3 test.py

The shell will now run your program like a charm (that is, provided you’ve written flawless code). Visit codecademy to take their course on using the command-line for free.

When you get really familiar with the command-line, you’ll find yourself writing scripts to automate tasks on your computer. Let me give you a real world example: A few weeks ago I decided to move all my personal pictures onto one computer. So I’m sitting there looking through my MacBook Pro, discovering that the iPhoto app has stored all the pictures of my old iPhone. Problem was that iPhoto had a really bad way of storing these. Inside a directory named “Master” there was three directories: “2013”, “2014” and “2015”. All seems fine, right? Well, I went on and to my horror, discovered that there were about ten sub-directories inside each of these three directories. You’re probably thinking “thirty folders containing pictures? It could’ve been way worse.” and you’re right. What if I told you that each single one of these directories contained about a hundred more? Well yes. It turned out that iPhoto had made a directory for each day a picture was taken. Lets say I’d taken a random picture on an uneventful day. iPhoto had now made an entire directory only for storing this one picture. As you can imagine, this would’ve taken well over a day to go through. I however wasn’t about to waste a single hour doing this.

“What makes the greatest programmers is laziness”

Entering the bash-scripts. Remember when I told you how powerful the command-line can be? Being a programming wizard lets you make sets of commands for the shell that can do anything you want! You can probably see where this is going, but before I reveal my magic trick, let me drop a little knowledge on you. What makes the greatest programmers is laziness. What would make me say that you ask? A lazy programmer never repeats his code. He instead writes code that can be used over and over again. Code designed with reusability in mind. Code like that usually takes more time to construct, but ends up leading to less work further down the line. In my case this meant writing a script that could go through every sub-directory of Master regardless of name and size. So after sketching a quick flowchart, I got to work.

My script would look inside the Master directory to see if there was any directories within it. It would then look inside the first one, in this case the 2013 directory, to see if there was any directories inside. It would keep on doing so until it was at the end of the line. Now it looked for any picture or video file. Prior to running this script I had made a directory in my Home directory and designated it as the target destination, meaning that any time my script discovered any media files, it would move them to this folder. When the directory was empty, it jumped out and deleted it. Now having a new “first” directory it would just repeat these steps until it had gone through every single directory inside Master, deleting the sub-directories in the process.

This probably took some time considering there was well over a thousand directories to go through, right? Well. Do you still remember the “powerful part I mentioned? I’ll proudly have you know it only took about two seconds for the script to complete its task. Admittedly the files were only moved to a new location on the same storage device, but I think we can agree that two seconds’ still amazingly fast for this amount of media files. So that’s my tale of how I turned a day’s work into thirty minutes using the command-line.

So, in conclusion, learn how to use the command-line as soon as possible. It’s a must for every programmer. Knowing it, and how to write shell scripts gives you limitless control. This is my awesome, but potentially highly dangerous bash-script

#!/bin/bash

startDIR=$(pwd)
DIR=$(ls -d */|head -n 1)

while true; do
    if [ "$(ls -A */)" ]; then
        cd $DIR
    else
        if [ "$(ls)" ]; then
            if [ "$(pwd)" == "$startDIR" ]; then
                break
            else
                mv * ~/Pictures/
            fi
        else
            cd ../
            rm -r $(ls -d */|head -n 1)
        fi
    fi
    DIR=$(ls -d */|head -n 1)
done

Until next time, keep coding.

Learn how to use the command-line at codecademy.com