diff --git a/01-command-line.md b/01-command-line.md
new file mode 100644
index 0000000..64a7a8e
--- /dev/null
+++ b/01-command-line.md
@@ -0,0 +1,167 @@
+---
+title: "Introducing the Command Line"
+teaching: 20
+exercises: 3
+---
+
+:::::::::::::::::::::::::::::::::::::: questions
+
+- What is a command shell and why would I use one?
+
+::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::: objectives
+
+- Explain when and why command-line interfaces should be used instead of graphical interfaces.
+
+::::::::::::::::::::::::::::::::::::::::::::::::
+
+### Background
+
+Humans and computers commonly interact in many different ways, such as through a keyboard and mouse, touch screen
+interfaces, or using speech recognition systems. The most widely used way to interact with personal computers is called
+a **graphical user interface** (GUI). With a GUI, we give instructions by clicking a mouse and using menu-driven
+interactions.
+
+While the visual aid of a GUI makes it intuitive to learn, this way of delivering instructions to a computer scales very
+poorly. Imagine the following task: for a literature search, you have to copy the third line of one thousand text files
+in one thousand different directories and paste it into a single file. Using a GUI, you would not only be clicking at
+your desk for several hours, but you could potentially also commit an error in the process of completing this repetitive
+task. This is where we take advantage of the Unix shell. The Unix shell is both a **command-line interface** (CLI) and
+a scripting language, allowing such repetitive tasks to be done automatically and fast. With the proper commands, the
+shell can repeat tasks with or without some modification as many times as we want. Using the shell, the task in the
+literature example can be accomplished in seconds.
+
+### The Shell
+
+The shell is a program where users can type commands. With the shell, it's possible to invoke complicated programs like
+climate modeling software or simple commands that create an empty directory with only one line of code. The most popular
+Unix shell is Bash (the Bourne Again SHell --- so-called because it's derived from a shell written by Stephen
+Bourne). Bash is the default shell on most modern implementations of Unix and in most packages that provide Unix-like
+tools for Windows. Note that 'Git Bash' is a piece of software that enables Windows users to use a Bash like interface
+when interacting with Git.
+
+Using the shell will take some effort and some time to learn. While a GUI presents you with choices to select, CLI
+choices are not automatically presented to you, so you must learn a few commands like new vocabulary in a language
+you're studying. However, unlike a spoken language, a small number of "words" (i.e. commands) gets you a long way, and
+we'll cover those essential few today.
+
+The grammar of a shell allows you to combine existing tools into powerful pipelines and handle large volumes of data
+automatically. Sequences of commands can be written into a *script*, improving the reproducibility of workflows.
+
+In addition, the command line is often the easiest way to interact with remote machines and supercomputers. Familiarity
+with the shell is near essential to run a variety of specialized tools and resources including high-performance
+computing systems. As clusters and cloud computing systems become more popular for scientific data crunching, being able
+to interact with the shell is becoming a necessary skill. We can build on the command-line skills covered here to tackle
+a wide range of scientific questions and computational challenges.
+
+Let's get started.
+
+When the shell is first opened, you are presented with a **prompt**, indicating that the shell is waiting for input.
+
+```bash
+$
+```
+
+The shell typically uses `$ ` as the prompt, but may use a different symbol. In the examples for this lesson, we'll
+show the prompt as `$ `. Most importantly, *do not type the prompt* when typing commands. Only type the command that
+follows the prompt. This rule applies both in these lessons and in lessons from other sources. Also note that after
+you type a command, you have to press the Enter key to execute it.
+
+The prompt is followed by a **text cursor**, a character that indicates the position where your typing will appear. The
+cursor is usually a flashing or solid block, but it can also be an underscore or a pipe. You may have seen it in a text
+editor program, for example.
+
+Note that your prompt might look a little different. In particular, most popular shell environments by default put your
+user name and the host name before the `$`. Such a prompt might look like, e.g.:
+
+```bash
+nelle@localhost $
+```
+
+The prompt might even include more than this. Do not worry if your prompt is not just a short `$ `. This lesson does not
+depend on this additional information and it should also not get in your way. The only important item to focus on is the
+`$ ` character itself and we will see later why.
+
+So let's try our first command, `ls`, which is short for listing. This command will list the contents of the current
+directory:
+
+```bash
+$ ls
+```
+
+```output
+Desktop Downloads Movies Pictures
+Documents Library Music Public
+```
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Command not found
+
+If the shell can't find a program whose name is the command you typed, it will print an error message such as:
+
+```bash
+$ ks
+```
+
+```output
+ks: command not found
+```
+
+This might happen if the command was mis-typed or if the program corresponding to that command is not installed.
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+## Nelle's Pipeline: A Typical Problem
+
+Nelle Nemo, a marine biologist, has just returned from a six-month survey of the [North Pacific
+Gyre](https://en.wikipedia.org/wiki/North_Pacific_Gyre), where she has been sampling gelatinous marine life in the
+[Great Pacific Garbage Patch](https://en.wikipedia.org/wiki/Great_Pacific_Garbage_Patch). She has 1520 samples that
+she's run through an assay machine to measure the relative abundance of 300 proteins. She needs to run these 1520 files
+through an imaginary program called `goostats.sh`. In addition to this huge task, she has to write up results by the
+end of the month, so her paper can appear in a special issue of *Aquatic Goo Letters*.
+
+If Nelle chooses to run `goostats.sh` by hand using a GUI, she'll have to select and open a file 1520 times. If
+`goostats.sh` takes 30 seconds to run each file, the whole process will take more than 12 hours of Nelle's attention.
+With the shell, Nelle can instead assign her computer this mundane task while she focuses her attention on writing her
+paper.
+
+The next few lessons will explore the ways Nelle can achieve this. More specifically, the lessons explain how she can
+use a command shell to run the `goostats.sh` program, using loops to automate the repetitive steps of entering file
+names, so that her computer can work while she writes her paper.
+
+As a bonus, once she has put a processing pipeline together, she will be able to use it again whenever she collects more
+data.
+
+In order to achieve her task, Nelle needs to know how to:
+
+- navigate to a file/directory
+- create a file/directory
+- check the length of a file
+- chain commands together
+- retrieve a set of files
+- iterate over files
+- run a shell script containing her pipeline
+
+
+
+:::::::::::::::::::::::::::::::::::::::: keypoints
+
+- A shell is a program whose primary purpose is to read commands and run other programs.
+- This lesson uses Bash, the default shell in many implementations of Unix.
+- Programs can be run in Bash by entering commands at the command-line prompt.
+- The shell's main advantages are its high action-to-keystroke ratio, its support for automating repetitive tasks, and
+ its capacity to access networked machines.
+- A significant challenge when using the shell can be knowing what commands need to be run and how to run them.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+
+This chapter is from "[Software Carpentry The Unix Shell][swcarpentry-unix]". It is licensed under the
+[CC-BY-4.0][cc-by-4].
+
+
+[swcarpentry-unix]: https://swcarpentry.github.io/shell-novice/
+[cc-by-4]: https://creativecommons.org/licenses/by-sa/4.0/
diff --git a/02-filedir.md b/02-filedir.md
new file mode 100644
index 0000000..eeee737
--- /dev/null
+++ b/02-filedir.md
@@ -0,0 +1,818 @@
+---
+title: Navigating Files and Directories
+teaching: 30
+exercises: 10
+---
+
+::::::::::::::::::::::::::::::::::::::: objectives
+
+- Explain the similarities and differences between a file and a directory.
+- Translate an absolute path into a relative path and vice versa.
+- Construct absolute and relative paths that identify specific files and directories.
+- Use options and arguments to change the behaviour of a shell command.
+- Demonstrate the use of tab completion and explain its advantages.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+:::::::::::::::::::::::::::::::::::::::: questions
+
+- How can I move around on my computer?
+- How can I see what files and directories I have?
+- How can I specify the location of a file or directory on my computer?
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+:::::::::::::::::::::::::::::::::::::::: instructor
+
+Introducing and navigating the filesystem in the shell (covered in [Navigating Files and Directories](02-filedir.md)
+section) can be confusing. You may have both terminal and GUI file explorer open side by side so learners can see the
+content and file structure while they're using terminal to navigate the system.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+The part of the operating system responsible for managing files and directories is called the **file system**. It
+organizes our data into files, which hold information, and directories (also called 'folders'), which hold files or
+other directories.
+
+Several commands are frequently used to create, inspect, rename, and delete files and directories. To start exploring
+them, we'll go to our open shell window.
+
+First, let's find out where we are by running a command called `pwd` (which stands for 'print working
+directory'). Directories are like *places* — at any time while we are using the shell, we are in exactly one place
+called our **current working directory**. Commands mostly read and write files in the current working directory,
+i.e. 'here', so knowing where you are before running a command is important. `pwd` shows you where you are:
+
+```bash
+$ pwd
+```
+
+```output
+/Users/nelle
+```
+
+Here, the computer's response is `/Users/nelle`, which is Nelle's **home directory**:
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Home Directory Variation
+
+The home directory path will look different on different operating systems. On Linux, it may look like `/home/nelle`,
+and on Windows, it will be similar to `C:\Documents and Settings\nelle` or `C:\Users\nelle`. (Note that it may look
+slightly different for different versions of Windows.) In future examples, we've used Mac output as the default - Linux
+and Windows output may differ slightly but should be generally similar.
+
+We will also assume that your `pwd` command returns your user's home directory. If `pwd` returns something different,
+you may need to navigate there using `cd` or some commands in this lesson will not work as written. See [Exploring
+Other Directories](#exploring-other-directories) for more details on the `cd` command.
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+To understand what a 'home directory' is, let's have a look at how the file system as a whole is organized. For the
+sake of this example, we'll be illustrating the filesystem on our scientist Nelle's computer. After this illustration,
+you'll be learning commands to explore your own filesystem, which will be constructed in a similar way, but not be
+exactly identical.
+
+On Nelle's computer, the filesystem looks like this:
+
+![](fig/filesystem.svg){alt='The file system is made up of a root directory that contains sub-directories titled bin,
+data, users, and tmp'}
+
+The filesystem looks like an upside down tree. The topmost directory is the **root directory** that holds everything
+else. We refer to it using a slash character, `/`, on its own; this character is the leading slash in `/Users/nelle`.
+
+Inside that directory are several other directories: `bin` (which is where some built-in programs are stored), `data`
+(for miscellaneous data files), `Users` (where users' personal directories are located), `tmp` (for temporary files that
+don't need to be stored long-term), and so on.
+
+We know that our current working directory `/Users/nelle` is stored inside `/Users` because `/Users` is the first part
+of its name. Similarly, we know that `/Users` is stored inside the root directory `/` because its name begins with `/`.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Slashes
+
+Notice that there are two meanings for the `/` character. When it appears at the front of a file or directory name, it
+refers to the root directory. When it appears *inside* a path, it's just a separator.
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+Underneath `/Users`, we find one directory for each user with an account on Nelle's machine, her colleagues *imhotep*
+and *larry*.
+
+![](fig/home-directories.svg){alt='Like other directories, home directories are sub-directories underneath "/Users" like
+"/Users/imhotep", "/Users/larry" or"/Users/nelle"'}
+
+The user *imhotep*'s files are stored in `/Users/imhotep`, user *larry*'s in `/Users/larry`, and Nelle's in
+`/Users/nelle`. Nelle is the user in our examples here; therefore, we get `/Users/nelle` as our home directory.
+Typically, when you open a new command prompt, you will be in your home directory to start.
+
+Now let's learn the command that will let us see the contents of our own filesystem. We can see what's in our home
+directory by running `ls`:
+
+```bash
+$ ls
+```
+
+```output
+Applications Documents Library Music Public
+Desktop Downloads Movies Pictures
+```
+
+(Again, your results may be slightly different depending on your operating system and how you have customized your
+filesystem.)
+
+`ls` prints the names of the files and directories in the current directory. We can make its output more comprehensible
+by using the `-F` **option** which tells `ls` to classify the output by adding a marker to file and directory names to
+indicate what they are:
+
+- a trailing `/` indicates that this is a directory
+- `@` indicates a link
+- `*` indicates an executable
+
+Depending on your shell's default settings, the shell might also use colors to indicate whether each entry is a file or
+directory.
+
+```bash
+$ ls -F
+```
+
+```output
+Applications/ Documents/ Library/ Music/ Public/
+Desktop/ Downloads/ Movies/ Pictures/
+```
+
+Here, we can see that the home directory contains only **sub-directories**. Any names in the output that don't have a
+classification symbol are **files** in the current working directory.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Clearing your terminal
+
+If your screen gets too cluttered, you can clear your terminal using the `clear` command. You can still access previous
+commands using ↑ and ↓ to move line-by-line, or by scrolling in your terminal.
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+### Getting help
+
+`ls` has lots of other **options**. There are two common ways to find out how to use a command and what options it
+accepts --- **depending on your environment, you might find that only one of these ways works:**
+
+1. We can pass a `--help` option to any command (available on Linux and Git Bash), for example:
+
+ ```bash
+ $ ls --help
+ ```
+
+2. We can read its manual with `man` (available on Linux and macOS):
+
+ ```bash
+ $ man ls
+ ```
+
+We'll describe both ways next.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Help for built-in commands
+
+Some commands are built in to the Bash shell, rather than existing as separate programs on the filesystem. One example
+is the `cd` (change directory) command. If you get a message like `No manual entry for cd`, try `help cd` instead. The
+`help` command is how you get usage information for [Bash
+built-ins](https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html).
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+#### The `--help` option
+
+Most bash commands and programs that people have written to be run from within bash, support a `--help` option that
+displays more information on how to use the command or program.
+
+```bash
+$ ls --help
+```
+
+```output
+Usage: ls [OPTION]... [FILE]...
+List information about the FILEs (the current directory by default).
+Sort entries alphabetically if neither -cftuvSUX nor --sort is specified.
+
+Mandatory arguments to long options are mandatory for short options, too.
+ -a, --all do not ignore entries starting with .
+ -A, --almost-all do not list implied . and ..
+ --author with -l, print the author of each file
+ -b, --escape print C-style escapes for nongraphic characters
+ --block-size=SIZE scale sizes by SIZE before printing them; e.g.,
+ '--block-size=M' prints sizes in units of
+ 1,048,576 bytes; see SIZE format below
+ -B, --ignore-backups do not list implied entries ending with ~
+ -c with -lt: sort by, and show, ctime (time of last
+ modification of file status information);
+ with -l: show ctime and sort by name;
+ otherwise: sort by ctime, newest first
+ -C list entries by columns
+ --color[=WHEN] colorize the output; WHEN can be 'always' (default
+ if omitted), 'auto', or 'never'; more info below
+ -d, --directory list directories themselves, not their contents
+ -D, --dired generate output designed for Emacs' dired mode
+ -f do not sort, enable -aU, disable -ls --color
+ -F, --classify append indicator (one of */=>@|) to entries
+... ... ...
+```
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Unsupported command-line options
+
+If you try to use an option that is not supported, `ls` and other commands will usually print an error message similar
+to:
+
+```bash
+$ ls -j
+```
+
+```error
+ls: invalid option -- 'j'
+Try 'ls --help' for more information.
+```
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+#### The `man` command
+
+The other way to learn about `ls` is to type
+
+```bash
+$ man ls
+```
+
+This command will turn your terminal into a page with a description of the `ls` command and its options.
+
+To navigate through the `man` pages, you may use ↑ and ↓ to move line-by-line, or try B
+and Spacebar to skip up and down by a full page. To search for a character or word in the `man` pages, use
+/ followed by the character or word you are searching for. Sometimes a search will result in multiple hits.
+If so, you can move between hits using N (for moving forward) and Shift\+N (for moving
+backward).
+
+To **quit** the `man` pages, press Q.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Manual pages on the web
+
+Of course, there is a third way to access help for commands: searching the internet via your web browser. When using
+internet search, including the phrase `unix man page` in your search query will help to find relevant results.
+
+GNU provides links to its [manuals](https://www.gnu.org/manual/manual.html) including the [core GNU
+utilities](https://www.gnu.org/software/coreutils/manual/coreutils.html), which covers many commands introduced within
+this lesson.
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Exploring More `ls` Options
+
+You can also use two options at the same time. What does the command `ls` do when used with the `-l` option? What about
+if you use both the `-l` and the `-h` option?
+
+Some of its output is about properties that we do not cover in this lesson (such as file permissions and ownership), but
+the rest should be useful nevertheless.
+
+::::::::::::::: solution
+
+## Solution
+
+The `-l` option makes `ls` use a **l**ong listing format, showing not only the file/directory names but also additional
+information, such as the file size and the time of its last modification. If you use both the `-h` option and the `-l`
+option, this makes the file size '**h**uman readable', i.e. displaying something like `5.3K` instead of `5369`.
+
+
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Listing in Reverse Chronological Order
+
+By default, `ls` lists the contents of a directory in alphabetical order by name. The command `ls -t` lists items by
+time of last change instead of alphabetically. The command `ls -r` lists the contents of a directory in reverse order.
+Which file is displayed last when you combine the `-t` and `-r` options? Hint: You may need to use the `-l` option to
+see the last changed dates.
+
+::::::::::::::: solution
+
+## Solution
+
+The most recently changed file is listed last when using `-rt`. This can be very useful for finding your most recent
+edits or checking to see if a new output file was written.
+
+
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+### Exploring Other Directories
+
+Not only can we use `ls` on the current working directory, but we can use it to list the contents of a different
+directory. Let's take a look at our `Desktop` directory by running `ls -F Desktop`, i.e., the command `ls` with the
+`-F` **option** and the [**argument**][Arguments] `Desktop`. The argument `Desktop` tells `ls` that we want a listing
+of something other than our current working directory:
+
+```bash
+$ ls -F Desktop
+```
+
+```output
+shell-lesson-data/
+```
+
+Note that if a directory named `Desktop` does not exist in your current working directory, this command will return an
+error. Typically, a `Desktop` directory exists in your home directory, which we assume is the current working directory
+of your bash shell.
+
+Your output should be a list of all the files and sub-directories in your Desktop directory, including the
+`shell-lesson-data` directory you downloaded at the [setup for this lesson](../learners/setup.md). (On most systems, the
+contents of the `Desktop` directory in the shell will show up as icons in a graphical user interface behind all the open
+windows. See if this is the case for you.)
+
+Organizing things hierarchically helps us keep track of our work. While it's possible to put hundreds of files in our
+home directory just as it's possible to pile hundreds of printed papers on our desk, it's much easier to find things
+when they've been organized into sensibly-named subdirectories.
+
+Now that we know the `shell-lesson-data` directory is located in our Desktop directory, we can do two things.
+
+First, using the same strategy as before, we can look at its contents by passing a directory name to `ls`:
+
+```bash
+$ ls -F Desktop/shell-lesson-data
+```
+
+```output
+exercise-data/ north-pacific-gyre/
+```
+
+Second, we can actually change our location to a different directory, so we are no longer located in our home directory.
+
+The command to change locations is `cd` followed by a directory name to change our working directory. `cd` stands for
+'change directory', which is a bit misleading. The command doesn't change the directory; it changes the shell's current
+working directory. In other words it changes the shell's settings for what directory we are in. The `cd` command is
+akin to double-clicking a folder in a graphical interface to get into that folder.
+
+Let's say we want to move into the `exercise-data` directory we saw above. We can use the following series of commands
+to get there:
+
+```bash
+$ cd Desktop
+$ cd shell-lesson-data
+$ cd exercise-data
+```
+
+These commands will move us from our home directory into our Desktop directory, then into the `shell-lesson-data`
+directory, then into the `exercise-data` directory. You will notice that `cd` doesn't print anything. This is normal.
+Many shell commands will not output anything to the screen when successfully executed. But if we run `pwd` after it, we
+can see that we are now in `/Users/nelle/Desktop/shell-lesson-data/exercise-data`.
+
+If we run `ls -F` without arguments now, it lists the contents of
+`/Users/nelle/Desktop/shell-lesson-data/exercise-data`, because that's where we now are:
+
+```bash
+$ pwd
+```
+
+```output
+/Users/nelle/Desktop/shell-lesson-data/exercise-data
+```
+
+```bash
+$ ls -F
+```
+
+```output
+alkanes/ animal-counts/ creatures/ numbers.txt writing/
+```
+
+We now know how to go down the directory tree (i.e. how to go into a subdirectory), but how do we go up (i.e. how do we
+leave a directory and go into its parent directory)? We might try the following:
+
+```bash
+$ cd shell-lesson-data
+```
+
+```error
+-bash: cd: shell-lesson-data: No such file or directory
+```
+
+But we get an error! Why is this?
+
+With our methods so far, `cd` can only see sub-directories inside your current directory. There are different ways to
+see directories above your current location; we'll start with the simplest.
+
+There is a shortcut in the shell to move up one directory level. It works as follows:
+
+```bash
+$ cd ..
+```
+
+`..` is a special directory name meaning "the directory containing this one", or more succinctly, the **parent** of the
+current directory. Sure enough, if we run `pwd` after running `cd ..`, we're back in
+`/Users/nelle/Desktop/shell-lesson-data`:
+
+```bash
+$ pwd
+```
+
+```output
+/Users/nelle/Desktop/shell-lesson-data
+```
+
+The special directory `..` doesn't usually show up when we run `ls`. If we want to display it, we can add the `-a`
+option to `ls -F`:
+
+```bash
+$ ls -F -a
+```
+
+```output
+./ ../ exercise-data/ north-pacific-gyre/
+```
+
+`-a` stands for 'show all' (including hidden files); it forces `ls` to show us file and directory names that begin with
+`.`, such as `..` (which, if we're in `/Users/nelle`, refers to the `/Users` directory). As you can see, it also
+displays another special directory that's just called `.`, which means 'the current working directory'. It may seem
+redundant to have a name for it, but we'll see some uses for it soon.
+
+Note that in most command line tools, multiple options can be combined with a single `-` and no spaces between the
+options; `ls -F -a` is equivalent to `ls -Fa`.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Other Hidden Files
+
+In addition to the hidden directories `..` and `.`, you may also see a file called `.bash_profile`. This file usually
+contains shell configuration settings. You may also see other files and directories beginning with `.`. These are
+usually files and directories that are used to configure different programs on your computer. The prefix `.` is used to
+prevent these configuration files from cluttering the terminal when a standard `ls` command is used.
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+These three commands are the basic commands for navigating the filesystem on your computer: `pwd`, `ls`, and `cd`. Let's
+explore some variations on those commands. What happens if you type `cd` on its own, without giving a directory?
+
+```bash
+$ cd
+```
+
+How can you check what happened? `pwd` gives us the answer!
+
+```bash
+$ pwd
+```
+
+```output
+/Users/nelle
+```
+
+It turns out that `cd` without an argument will return you to your home directory, which is great if you've got lost in
+your own filesystem.
+
+Let's try returning to the `exercise-data` directory from before. Last time, we used three commands, but we can actually
+string together the list of directories to move to `exercise-data` in one step:
+
+```bash
+$ cd Desktop/shell-lesson-data/exercise-data
+```
+
+Check that we've moved to the right place by running `pwd` and `ls -F`.
+
+If we want to move up one level from the data directory, we could use `cd ..`. But there is another way to move to any
+directory, regardless of your current location.
+
+So far, when specifying directory names, or even a directory path (as above), we have been using **relative paths**.
+When you use a relative path with a command like `ls` or `cd`, it tries to find that location from where we are, rather
+than from the root of the file system.
+
+However, it is possible to specify the **absolute path** to a directory by including its entire path from the root
+directory, which is indicated by a leading slash. The leading `/` tells the computer to follow the path from the root of
+the file system, so it always refers to exactly one directory, no matter where we are when we run the command.
+
+This allows us to move to our `shell-lesson-data` directory from anywhere on the filesystem (including from inside
+`exercise-data`). To find the absolute path we're looking for, we can use `pwd` and then extract the piece we need to
+move to `shell-lesson-data`.
+
+```bash
+$ pwd
+```
+
+```output
+/Users/nelle/Desktop/shell-lesson-data/exercise-data
+```
+
+```bash
+$ cd /Users/nelle/Desktop/shell-lesson-data
+```
+
+Run `pwd` and `ls -F` to ensure that we're in the directory we expect.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Two More Shortcuts
+
+The shell interprets a tilde (`~`) character at the start of a path to mean "the current user's home directory". For
+example, if Nelle's home directory is `/Users/nelle`, then `~/data` is equivalent to `/Users/nelle/data`. This only
+works if it is the first character in the path; `here/there/~/elsewhere` is *not* `here/there/Users/nelle/elsewhere`.
+
+Another shortcut is the `-` (dash) character. `cd` will translate `-` into *the previous directory I was in*, which is
+faster than having to remember, then type, the full path. This is a *very* efficient way of moving *back and forth
+between two directories* -- i.e. if you execute `cd -` twice, you end up back in the starting directory.
+
+The difference between `cd ..` and `cd -` is that the former brings you *up*, while the latter brings you *back*.
+
+***
+
+Try it! First navigate to `~/Desktop/shell-lesson-data` (you should already be there).
+
+```bash
+$ cd ~/Desktop/shell-lesson-data
+```
+
+Then `cd` into the `exercise-data/creatures` directory
+
+```bash
+$ cd exercise-data/creatures
+```
+
+Now if you run
+
+```bash
+$ cd -
+```
+
+you'll see you're back in `~/Desktop/shell-lesson-data`. Run `cd -` again and you're back in
+`~/Desktop/shell-lesson-data/exercise-data/creatures`
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Absolute vs Relative Paths
+
+Starting from `/Users/nelle/data`, which of the following commands could Nelle use to navigate to her home directory,
+which is `/Users/nelle`?
+
+1. `cd .`
+2. `cd /`
+3. `cd /home/nelle`
+4. `cd ../..`
+5. `cd ~`
+6. `cd home`
+7. `cd ~/data/..`
+8. `cd`
+9. `cd ..`
+
+::::::::::::::: solution
+
+## Solution
+
+1. No: `.` stands for the current directory.
+2. No: `/` stands for the root directory.
+3. No: Nelle's home directory is `/Users/nelle`.
+4. No: this command goes up two levels, i.e. ends in `/Users`.
+5. Yes: `~` stands for the user's home directory, in this case `/Users/nelle`.
+6. No: this command would navigate into a directory `home` in the current directory if it exists.
+7. Yes: unnecessarily complicated, but correct.
+8. Yes: shortcut to go back to the user's home directory.
+9. Yes: goes up one level.
+
+
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Relative Path Resolution
+
+Using the filesystem diagram below, if `pwd` displays `/Users/thing`, what will `ls -F ../backup` display?
+
+1. `../backup: No such file or directory`
+2. `2012-12-01 2013-01-08 2013-01-27`
+3. `2012-12-01/ 2013-01-08/ 2013-01-27/`
+4. `original/ pnas_final/ pnas_sub/`
+
+![](fig/filesystem-challenge.svg){alt='A directory tree below the Users directory where "/Users" contains the
+directories "backup" and "thing"; "/Users/backup" contains "original","pnas\_final" and "pnas\_sub"; "/Users/thing"
+contains "backup"; and"/Users/thing/backup" contains "2012-12-01", "2013-01-08" and"2013-01-27"'}
+
+::::::::::::::: solution
+
+## Solution
+
+1. No: there *is* a directory `backup` in `/Users`.
+2. No: this is the content of `Users/thing/backup`, but with `..`, we asked for one level further up.
+3. No: see previous explanation.
+4. Yes: `../backup/` refers to `/Users/backup/`.
+
+
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## `ls` Reading Comprehension
+
+Using the filesystem diagram below, if `pwd` displays `/Users/backup`, and `-r` tells `ls` to display things in reverse
+order, what command(s) will result in the following output:
+
+```output
+pnas_sub/ pnas_final/ original/
+```
+
+![](fig/filesystem-challenge.svg){alt='A directory tree below the Users directory where "/Users" contains the
+directories "backup" and "thing"; "/Users/backup" contains "original","pnas\_final" and "pnas\_sub"; "/Users/thing"
+contains "backup"; and"/Users/thing/backup" contains "2012-12-01", "2013-01-08" and"2013-01-27"'}
+
+1. `ls pwd`
+2. `ls -r -F`
+3. `ls -r -F /Users/backup`
+
+::::::::::::::: solution
+
+## Solution
+
+1. No: `pwd` is not the name of a directory.
+2. Yes: `ls` without directory argument lists files and directories in the current directory.
+3. Yes: uses the absolute path explicitly.
+
+
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+## General Syntax of a Shell Command
+
+We have now encountered commands, options, and arguments, but it is perhaps useful to formalise some terminology.
+
+Consider the command below as a general example of a command, which we will dissect into its component parts:
+
+```bash
+$ ls -F /
+```
+
+![](fig/shell_command_syntax.svg){alt='General syntax of a shell command'}
+
+`ls` is the **command**, with an **option** `-F` and an **argument** `/`. We've already encountered options which
+either start with a single dash (`-`), known as **short options**, or two dashes (`--`), known as **long options**.
+[Options] change the behavior of a command and [Arguments] tell the command what to operate on (e.g. files and
+directories). Sometimes options and arguments are referred to as **parameters**. A command can be called with more
+than one option and more than one argument, but a command doesn't always require an argument or an option.
+
+You might sometimes see options being referred to as **switches** or **flags**, especially for options that take no
+argument. In this lesson we will stick with using the term *option*.
+
+Each part is separated by spaces. If you omit the space between `ls` and `-F` the shell will look for a command called
+`ls-F`, which doesn't exist. Also, capitalization can be important. For example, `ls -s` will display the size of files
+and directories alongside the names, while `ls -S` will sort the files and directories by size, as shown below:
+
+```bash
+$ cd ~/Desktop/shell-lesson-data
+$ ls -s exercise-data
+```
+
+```output
+total 28
+ 4 animal-counts 4 creatures 12 numbers.txt 4 alkanes 4 writing
+```
+
+Note that the sizes returned by `ls -s` are in *blocks*. As these are defined differently for different operating
+systems, you may not obtain the same figures as in the example.
+
+```bash
+$ ls -S exercise-data
+```
+
+```output
+animal-counts creatures alkanes writing numbers.txt
+```
+
+Putting all that together, our command `ls -F /` above gives us a listing of files and directories in the root directory
+`/`. An example of the output you might get from the above command is given below:
+
+```bash
+$ ls -F /
+```
+
+```output
+Applications/ System/
+Library/ Users/
+Network/ Volumes/
+```
+
+
+::::::::::::::::::::::::::::::::::::::::: callout
+### When to use short or long options
+When options exist as both short and long options:
+
+- Use the short option when typing commands directly into the shell to minimize keystrokes and get your task done
+ faster.
+- Use the long option in scripts to provide clarity. It will be read many times and typed once.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+### Nelle's Pipeline: Organizing Files
+
+Knowing this much about files and directories, Nelle is ready to organize the files that the protein assay machine will
+create.
+
+She creates a directory called `north-pacific-gyre` (to remind herself where the data came from), which will contain the
+data files from the assay machine and her data processing scripts.
+
+Each of her physical samples is labelled according to her lab's convention with a unique ten-character ID, such as
+'NENE01729A'. This ID is what she used in her collection log to record the location, time, depth, and other
+characteristics of the sample, so she decides to use it within the filename of each data file. Since the output of the
+assay machine is plain text, she will call her files `NENE01729A.txt`, `NENE01812A.txt`, and so on. All 1520 files will
+go into the same directory.
+
+Now in her current directory `shell-lesson-data`, Nelle can see what files she has using the command:
+
+```bash
+$ ls north-pacific-gyre/
+```
+
+This command is a lot to type, but she can let the shell do most of the work through what is called **tab completion**.
+If she types:
+
+```bash
+$ ls nor
+```
+
+and then presses Tab (the tab key on her keyboard), the shell automatically completes the directory name for
+her:
+
+```bash
+$ ls north-pacific-gyre/
+```
+
+Pressing Tab again does nothing, since there are multiple possibilities; pressing Tab twice brings
+up a list of all the files.
+
+If Nelle then presses G and then presses Tab again, the shell will append 'goo' since all files
+that start with 'g' share the first three characters 'goo'.
+
+```bash
+$ ls north-pacific-gyre/goo
+```
+
+To see all of those files, she can press Tab twice more.
+
+```bash
+ls north-pacific-gyre/goo
+goodiff.sh goostats.sh
+```
+
+This is called **tab completion**, and we will see it in many other tools as we go on.
+
+
+
+[Arguments]: https://swcarpentry.github.io/shell-novice/reference.html#argument
+
+
+:::::::::::::::::::::::::::::::::::::::: keypoints
+
+- The file system is responsible for managing information on the disk.
+- Information is stored in files, which are stored in directories (folders).
+- Directories can also store other directories, which then form a directory tree.
+- `pwd` prints the user's current working directory.
+- `ls [path]` prints a listing of a specific file or directory; `ls` on its own lists the current working directory.
+- `cd [path]` changes the current working directory.
+- Most commands take options that begin with a single `-`.
+- Directory names in a path are separated with `/` on Unix, but `\` on Windows.
+- `/` on its own is the root directory of the whole file system.
+- An absolute path specifies a location from the root of the file system.
+- A relative path specifies a location starting from the current location.
+- `.` on its own means 'the current directory'; `..` means 'the directory above the current one'.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+
+
+This chapter is from "[Software Carpentry The Unix Shell][swcarpentry-unix]". It is licensed under the
+[CC-BY-4.0][cc-by-4].
+
+
+[swcarpentry-unix]: https://swcarpentry.github.io/shell-novice/
+[cc-by-4]: https://creativecommons.org/licenses/by-sa/4.0/
diff --git a/03-create.md b/03-create.md
new file mode 100644
index 0000000..081eb10
--- /dev/null
+++ b/03-create.md
@@ -0,0 +1,1764 @@
+---
+title: Working With Files and Directories
+teaching: 30
+exercises: 20
+---
+
+::::::::::::::::::::::::::::::::::::::: objectives
+
+- Create a directory hierarchy that matches a given diagram.
+- Create files in that hierarchy using an editor or by copying and renaming existing files.
+- Delete, copy and move specified files and/or directories.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+:::::::::::::::::::::::::::::::::::::::: questions
+
+- How can I create, copy, and delete files and directories?
+- How can I edit files?
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+
+## Creating directories
+
+We now know how to explore files and directories, but how do we create them in the first place?
+
+In this episode we will learn about creating and moving files and directories, using the `exercise-data/writing`
+directory as an example.
+
+### Step one: see where we are and what we already have
+
+We should still be in the `shell-lesson-data` directory on the Desktop, which we can check using:
+
+```bash
+$ pwd
+```
+
+```output
+/Users/nelle/Desktop/shell-lesson-data
+```
+
+Next we'll move to the `exercise-data/writing` directory and see what it contains:
+
+```bash
+$ cd exercise-data/writing/
+$ ls -F
+```
+
+```output
+haiku.txt LittleWomen.txt
+```
+
+### Create a directory
+
+Let's create a new directory called `thesis` using the command `mkdir thesis` (which has no output):
+
+```bash
+$ mkdir thesis
+```
+
+As you might guess from its name, `mkdir` means 'make directory'. Since `thesis` is a relative path (i.e., does not
+have a leading slash, like `/what/ever/thesis`), the new directory is created in the current working directory:
+
+```bash
+$ ls -F
+```
+
+```output
+haiku.txt LittleWomen.txt thesis/
+```
+
+Since we've just created the `thesis` directory, there's nothing in it yet:
+
+```bash
+$ ls -F thesis
+```
+
+Note that `mkdir` is not limited to creating single directories one at a time. The `-p` option allows `mkdir` to create
+a directory with nested subdirectories in a single operation:
+
+```bash
+$ mkdir -p ../project/data ../project/results
+```
+
+The `-R` option to the `ls` command will list all nested subdirectories within a directory. Let's use `ls -FR` to
+recursively list the new directory hierarchy we just created in the `project` directory:
+
+```bash
+$ ls -FR ../project
+```
+
+```output
+../project/:
+data/ results/
+
+../project/data:
+
+../project/results:
+```
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Two ways of doing the same thing
+
+Using the shell to create a directory is no different than using a file explorer. If you open the current directory
+using your operating system's graphical file explorer, the `thesis` directory will appear there too. While the shell
+and the file explorer are two different ways of interacting with the files, the files and directories themselves are the
+same.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Good names for files and directories
+
+Complicated names of files and directories can make your life painful when working on the command line. Here we provide
+a few useful tips for the names of your files and directories.
+
+1. Don't use spaces.
+
+Spaces can make a name more meaningful, but since spaces are used to separate arguments on the command line it is better
+to avoid them in names of files and directories. You can use `-` or `_` instead (e.g. `north-pacific-gyre/` rather than
+`north pacific gyre/`). To test this out, try typing `mkdir north pacific gyre` and see what directory (or
+directories!) are made when you check with `ls -F`.
+
+2. Don't begin the name with `-` (dash).
+
+Commands treat names starting with `-` as options.
+
+3. Stick with letters, numbers, `.` (period or 'full stop'), `-` (dash) and `_` (underscore).
+
+Many other characters have special meanings on the command line. We will learn about some of these during this lesson.
+There are special characters that can cause your command to not work as expected and can even result in data loss.
+
+If you need to refer to names of files or directories that have spaces or other special characters, you should surround
+the name in quotes (`""`).
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::: instructor
+
+Learners can sometimes get trapped within command-line text editors such as Vim, Emacs, or Nano. Closing the terminal
+emulator and opening a new one can be frustrating as learners will have to navigate to the correct folder again. Our
+recommendation to mitigate this problem is that instructors should use the same text editor as the learners during
+workshops (in most cases Nano).
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+### Create a text file
+
+Let's change our working directory to `thesis` using `cd`, then run a text editor called Nano to create a file called
+`draft.txt`:
+
+```bash
+$ cd thesis
+$ nano draft.txt
+```
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Which Editor?
+
+When we say, '`nano` is a text editor' we really do mean 'text'. It can only work with plain character data, not tables,
+images, or any other human-friendly media. We use it in examples because it is one of the least complex text
+editors. However, because of this trait, it may not be powerful enough or flexible enough for the work you need to do
+after this workshop. On Unix systems (such as Linux and macOS), many programmers use
+[Emacs](https://www.gnu.org/software/emacs/) or [Vim](https://www.vim.org/) (both of which require more time to learn),
+or a graphical editor such as [Gedit](https://projects.gnome.org/gedit/) or [VScode](https://code.visualstudio.com/). On
+Windows, you may wish to use [Notepad++](https://notepad-plus-plus.org/). Windows also has a built-in editor called
+`notepad` that can be run from the command line in the same way as `nano` for the purposes of this lesson.
+
+No matter what editor you use, you will need to know where it searches for and saves files. If you start it from the
+shell, it will (probably) use your current working directory as its default location. If you use your computer's start
+menu, it may want to save files in your Desktop or Documents directory instead. You can change this by navigating to
+another directory the first time you 'Save As...'
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+Let's type in a few lines of text.
+
+![](fig/nano-screenshot.png){alt="screenshot of nano text editor in action with the text It's not publish or perish any
+more, it's share and thrive"}
+
+Once we're happy with our text, we can press Ctrl\+O (press the Ctrl or
+Control key and, while holding it down, press the O key) to write our data to disk. We will be
+asked to provide a name for the file that will contain our text. Press Return to accept the suggested default
+of `draft.txt`.
+
+Once our file is saved, we can use Ctrl\+X to quit the editor and return to the shell.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Control, Ctrl, or ^ Key
+
+The Control key is also called the 'Ctrl' key. There are various ways in which using the Control key may be
+described. For example, you may see an instruction to press the Control key and, while holding it down, press
+the X key, described as any of:
+
+- `Control-X`
+- `Control+X`
+- `Ctrl-X`
+- `Ctrl+X`
+- `^X`
+- `C-x`
+
+In nano, along the bottom of the screen you'll see `^G Get Help ^O WriteOut`. This means that you can use `Control-G`
+to get help and `Control-O` to save your file.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+`nano` doesn't leave any output on the screen after it exits, but `ls` now shows that we have created a file called
+`draft.txt`:
+
+```bash
+$ ls
+```
+
+```output
+draft.txt
+```
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Creating Files a Different Way
+
+We have seen how to create text files using the `nano` editor. Now, try the following command:
+
+```bash
+$ touch my_file.txt
+```
+
+1. What did the `touch` command do? When you look at your current directory using the GUI file explorer, does the file
+ show up?
+
+2. Use `ls -l` to inspect the files. How large is `my_file.txt`?
+
+3. When might you want to create a file this way?
+
+::::::::::::::: solution
+
+## Solution
+
+1. The `touch` command generates a new file called `my_file.txt` in your current directory. You can observe this newly
+ generated file by typing `ls` at the command line prompt. `my_file.txt` can also be viewed in your GUI file explorer.
+
+2. When you inspect the file with `ls -l`, note that the size of `my_file.txt` is 0 bytes. In other words, it contains
+ no data. If you open `my_file.txt` using your text editor it is blank.
+
+3. Some programs do not generate output files themselves, but instead require that empty files have already been
+ generated. When the program is run, it searches for an existing file to populate with its output. The touch command
+ allows you to efficiently generate a blank text file to be used by such programs.
+
+:::::::::::::::::::::::::
+
+To avoid confusion later on, we suggest removing the file you've just created before proceeding with the rest of the
+episode, otherwise future outputs may vary from those given in the lesson. To do this, use the following command:
+
+```bash
+$ rm my_file.txt
+```
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## What's In A Name?
+
+You may have noticed that all of Nelle's files are named 'something dot something', and in this part of the lesson, we
+always used the extension `.txt`. This is just a convention; we can call a file `mythesis` or almost anything else we
+want. However, most people use two-part names most of the time to help them (and their programs) tell different kinds of
+files apart. The second part of such a name is called the **filename extension** and indicates what type of data the
+file holds: `.txt` signals a plain text file, `.pdf` indicates a PDF document, `.cfg` is a configuration file full of
+parameters for some program or other, `.png` is a PNG image, and so on.
+
+This is just a convention, albeit an important one. Files merely contain bytes; it's up to us and our programs to
+interpret those bytes according to the rules for plain text files, PDF documents, configuration files, images, and so
+on.
+
+Naming a PNG image of a whale as `whale.mp3` doesn't somehow magically turn it into a recording of whale song, though it
+*might* cause the operating system to associate the file with a music player program. In this case, if someone
+double-clicked `whale.mp3` in a file explorer program,the music player will automatically (and erroneously) attempt to
+open the `whale.mp3` file.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+## Moving files and directories
+
+Returning to the `shell-lesson-data/exercise-data/writing` directory,
+
+```bash
+$ cd ~/Desktop/shell-lesson-data/exercise-data/writing
+```
+
+In our `thesis` directory we have a file `draft.txt` which isn't a particularly informative name, so let's change the
+file's name using `mv`, which is short for 'move':
+
+```bash
+$ mv thesis/draft.txt thesis/quotes.txt
+```
+
+The first argument tells `mv` what we're 'moving', while the second is where it's to go. In this case, we're moving
+`thesis/draft.txt` to `thesis/quotes.txt`, which has the same effect as renaming the file. Sure enough, `ls` shows us
+that `thesis` now contains one file called `quotes.txt`:
+
+```bash
+$ ls thesis
+```
+
+```output
+quotes.txt
+```
+
+One must be careful when specifying the target file name, since `mv` will silently overwrite any existing file with the
+same name, which could lead to data loss. By default, `mv` will not ask for confirmation before overwriting files.
+However, an additional option, `mv -i` (or `mv --interactive`), will cause `mv` to request such confirmation.
+
+Note that `mv` also works on directories.
+
+Let's move `quotes.txt` into the current working directory. We use `mv` once again, but this time we'll use just the
+name of a directory as the second argument to tell `mv` that we want to keep the filename but put the file somewhere
+new. (This is why the command is called 'move'.) In this case, the directory name we use is the special directory name
+`.` that we mentioned earlier.
+
+```bash
+$ mv thesis/quotes.txt .
+```
+
+The effect is to move the file from the directory it was in to the current working directory. `ls` now shows us that
+`thesis` is empty:
+
+```bash
+$ ls thesis
+```
+
+```output
+$
+```
+
+Alternatively, we can confirm the file `quotes.txt` is no longer present in the `thesis` directory by explicitly trying
+to list it:
+
+```bash
+$ ls thesis/quotes.txt
+```
+
+```error
+ls: cannot access 'thesis/quotes.txt': No such file or directory
+```
+
+`ls` with a filename or directory as an argument only lists the requested file or directory. If the file given as the
+argument doesn't exist, the shell returns an error as we saw above. We can use this to see that `quotes.txt` is now
+present in our current directory:
+
+```bash
+$ ls quotes.txt
+```
+
+```output
+quotes.txt
+```
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Moving Files to a new folder
+
+After running the following commands, Jamie realizes that she put the files `sucrose.dat` and `maltose.dat` into the
+wrong folder. The files should have been placed in the `raw` folder.
+
+```bash
+$ ls -F
+ analyzed/ raw/
+$ ls -F analyzed
+fructose.dat glucose.dat maltose.dat sucrose.dat
+$ cd analyzed
+```
+
+Fill in the blanks to move these files to the `raw/` folder (i.e. the one she forgot to put them in)
+
+```bash
+$ mv sucrose.dat maltose.dat ____/____
+```
+
+::::::::::::::: solution
+
+## Solution
+
+```bash
+$ mv sucrose.dat maltose.dat ../raw
+```
+
+Recall that `..` refers to the parent directory (i.e. one above the current directory) and that `.` refers to the
+current directory.
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+## Copying files and directories
+
+The `cp` command works very much like `mv`, except it copies a file instead of moving it. We can check that it did the
+right thing using `ls` with two paths as arguments --- like most Unix commands, `ls` can be given multiple paths at
+once:
+
+```bash
+$ cp quotes.txt thesis/quotations.txt
+$ ls quotes.txt thesis/quotations.txt
+```
+
+```output
+quotes.txt thesis/quotations.txt
+```
+
+We can also copy a directory and all its contents by using the [recursive](https://en.wikipedia.org/wiki/Recursion)
+option `-r`, e.g. to back up a directory:
+
+```bash
+$ cp -r thesis thesis_backup
+```
+
+We can check the result by listing the contents of both the `thesis` and `thesis_backup` directory:
+
+```bash
+$ ls thesis thesis_backup
+```
+
+```output
+thesis:
+quotations.txt
+
+thesis_backup:
+quotations.txt
+```
+
+It is important to include the `-r` flag. If you want to copy a directory and you omit this option you will see a
+message that the directory has been omitted because `-r not specified`.
+
+``` bash
+$ cp thesis thesis_backup
+cp: -r not specified; omitting directory 'thesis'
+```
+
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Renaming Files
+
+Suppose that you created a plain-text file in your current directory to contain a list of the statistical tests you will
+need to do to analyze your data, and named it `statstics.txt`
+
+After creating and saving this file you realize you misspelled the filename! You want to correct the mistake, which of
+the following commands could you use to do so?
+
+1. `cp statstics.txt statistics.txt`
+2. `mv statstics.txt statistics.txt`
+3. `mv statstics.txt .`
+4. `cp statstics.txt .`
+
+::::::::::::::: solution
+
+## Solution
+
+1. No. While this would create a file with the correct name, the incorrectly named file still exists in the directory
+ and would need to be deleted.
+2. Yes, this would work to rename the file.
+3. No, the period(.) indicates where to move the file, but does not provide a new file name; identical file names cannot
+ be created.
+4. No, the period(.) indicates where to copy the file, but does not provide a new file name; identical file names cannot
+ be created.
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Moving and Copying
+
+What is the output of the closing `ls` command in the sequence shown below?
+
+```bash
+$ pwd
+```
+
+```output
+/Users/jamie/data
+```
+
+```bash
+$ ls
+```
+
+```output
+proteins.dat
+```
+
+```bash
+$ mkdir recombined
+$ mv proteins.dat recombined/
+$ cp recombined/proteins.dat ../proteins-saved.dat
+$ ls
+```
+
+1. `proteins-saved.dat recombined`
+2. `recombined`
+3. `proteins.dat recombined`
+4. `proteins-saved.dat`
+
+::::::::::::::: solution
+
+## Solution
+
+We start in the `/Users/jamie/data` directory, and create a new folder called `recombined`. The second line moves
+(`mv`) the file `proteins.dat` to the new folder (`recombined`). The third line makes a copy of the file we just moved.
+The tricky part here is where the file was copied to. Recall that `..` means 'go up a level', so the copied file is now
+in `/Users/jamie`. Notice that `..` is interpreted with respect to the current working directory, **not** with respect
+to the location of the file being copied. So, the only thing that will show using ls (in `/Users/jamie/data`) is the
+recombined folder.
+
+1. No, see explanation above. `proteins-saved.dat` is located at `/Users/jamie`
+2. Yes
+3. No, see explanation above. `proteins.dat` is located at `/Users/jamie/data/recombined`
+4. No, see explanation above. `proteins-saved.dat` is located at `/Users/jamie`
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+## Removing files and directories
+
+Returning to the `shell-lesson-data/exercise-data/writing` directory, let's tidy up this directory by removing the
+`quotes.txt` file we created. The Unix command we'll use for this is `rm` (short for 'remove'):
+
+```bash
+$ rm quotes.txt
+```
+
+We can confirm the file has gone using `ls`:
+
+```bash
+$ ls quotes.txt
+```
+
+```error
+ls: cannot access 'quotes.txt': No such file or directory
+```
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Deleting Is Forever
+
+The Unix shell doesn't have a trash bin that we can recover deleted files from (though most graphical interfaces to Unix
+do). Instead, when we delete files, they are unlinked from the file system so that their storage space on disk can be
+recycled. Tools for finding and recovering deleted files do exist, but there's no guarantee they'll work in any
+particular situation, since the computer may recycle the file's disk space right away.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Using `rm` Safely
+
+What happens when we execute `rm -i thesis_backup/quotations.txt`? Why would we want this protection when using `rm`?
+
+::::::::::::::: solution
+
+## Solution
+
+```output
+rm: remove regular file 'thesis_backup/quotations.txt'? y
+```
+
+The `-i` option will prompt before (every) removal (use Y to confirm deletion or N to keep the
+file). The Unix shell doesn't have a trash bin, so all the files removed will disappear forever. By using the `-i`
+option, we have the chance to check that we are deleting only the files that we want to remove.
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+If we try to remove the `thesis` directory using `rm thesis`, we get an error message:
+
+```bash
+$ rm thesis
+```
+
+```error
+rm: cannot remove 'thesis': Is a directory
+```
+
+This happens because `rm` by default only works on files, not directories.
+
+`rm` can remove a directory *and all its contents* if we use the recursive option `-r`, and it will do so *without any
+confirmation prompts*:
+
+```bash
+$ rm -r thesis
+```
+
+Given that there is no way to retrieve files deleted using the shell, `rm -r` *should be used with great caution* (you
+might consider adding the interactive option `rm -r -i`).
+
+## Operations with multiple files and directories
+
+Oftentimes one needs to copy or move several files at once. This can be done by providing a list of individual
+filenames, or specifying a naming pattern using wildcards. Wildcards are special characters that can be used to
+represent unknown characters or sets of characters when navigating the Unix file system.
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Copy with Multiple Filenames
+
+For this exercise, you can test the commands in the `shell-lesson-data/exercise-data` directory.
+
+In the example below, what does `cp` do when given several filenames and a directory name?
+
+```bash
+$ mkdir backup
+$ cp creatures/minotaur.dat creatures/unicorn.dat backup/
+```
+
+In the example below, what does `cp` do when given three or more file names?
+
+```bash
+$ cd creatures
+$ ls -F
+```
+
+```output
+basilisk.dat minotaur.dat unicorn.dat
+```
+
+```bash
+$ cp minotaur.dat unicorn.dat basilisk.dat
+```
+
+::::::::::::::: solution
+
+## Solution
+
+If given more than one file name followed by a directory name (i.e. the destination directory must be the last
+argument), `cp` copies the files to the named directory.
+
+If given three file names, `cp` throws an error such as the one below, because it is expecting a directory name as the
+last argument.
+
+```error
+cp: target 'basilisk.dat' is not a directory
+```
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+### Using wildcards for accessing multiple files at once
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Wildcards
+
+`*` is a **wildcard**, which represents zero or more other characters. Let's consider the
+`shell-lesson-data/exercise-data/alkanes` directory: `*.pdb` represents `ethane.pdb`, `propane.pdb`, and every file that
+ends with '.pdb'. On the other hand, `p*.pdb` only represents `pentane.pdb` and `propane.pdb`, because the 'p' at the
+front can only represent filenames that begin with the letter 'p'.
+
+`?` is also a wildcard, but it represents exactly one character. So `?ethane.pdb` could represent `methane.pdb` whereas
+`*ethane.pdb` represents both `ethane.pdb` and `methane.pdb`.
+
+Wildcards can be used in combination with each other. For example, `???ane.pdb` indicates three characters followed by
+`ane.pdb`, giving `cubane.pdb ethane.pdb octane.pdb`.
+
+When the shell sees a wildcard, it expands the wildcard to create a list of matching filenames *before* running the
+preceding command. As an exception, if a wildcard expression does not match any file, Bash will pass the expression as
+an argument to the command as it is. For example, typing `ls *.pdf` in the `alkanes` directory (which contains only
+files with names ending with `.pdb`) results in an error message that there is no file called `*.pdf`. However,
+generally commands like `wc` and `ls` see the lists of file names matching these expressions, but not the wildcards
+themselves. It is the shell, not the other programs, that expands the wildcards.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## List filenames matching a pattern
+
+When run in the `alkanes` directory, which `ls` command(s) will produce this output?
+
+`ethane.pdb methane.pdb`
+
+1. `ls *t*ane.pdb`
+2. `ls *t?ne.*`
+3. `ls *t??ne.pdb`
+4. `ls ethane.*`
+
+::::::::::::::: solution
+
+## Solution
+
+The solution is `3.`
+
+`1.` shows all files whose names contain zero or more characters (`*`) followed by the letter `t`, then zero or more
+characters (`*`) followed by `ane.pdb`. This gives `ethane.pdb methane.pdb octane.pdb pentane.pdb`.
+
+`2.` shows all files whose names start with zero or more characters (`*`) followed by the letter `t`, then a single
+character (`?`), then `ne.` followed by zero or more characters (`*`). This will give us `octane.pdb` and `pentane.pdb`
+but doesn't match anything which ends in `thane.pdb`.
+
+`3.` fixes the problems of option 2 by matching two characters (`??`) between `t` and `ne`. This is the solution.
+
+`4.` only shows files starting with `ethane.`.
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## More on Wildcards
+
+Sam has a directory containing calibration data, datasets, and descriptions of the datasets:
+
+```bash
+.
+├── 2015-10-23-calibration.txt
+├── 2015-10-23-dataset1.txt
+├── 2015-10-23-dataset2.txt
+├── 2015-10-23-dataset_overview.txt
+├── 2015-10-26-calibration.txt
+├── 2015-10-26-dataset1.txt
+├── 2015-10-26-dataset2.txt
+├── 2015-10-26-dataset_overview.txt
+├── 2015-11-23-calibration.txt
+├── 2015-11-23-dataset1.txt
+├── 2015-11-23-dataset2.txt
+├── 2015-11-23-dataset_overview.txt
+├── backup
+│ ├── calibration
+│ └── datasets
+└── send_to_bob
+ ├── all_datasets_created_on_a_23rd
+ └── all_november_files
+```
+
+Before heading off to another field trip, she wants to back up her data and send some datasets to her colleague Bob. Sam
+uses the following commands to get the job done:
+
+```bash
+$ cp *dataset* backup/datasets
+$ cp ____calibration____ backup/calibration
+$ cp 2015-____-____ send_to_bob/all_november_files/
+$ cp ____ send_to_bob/all_datasets_created_on_a_23rd/
+```
+
+Help Sam by filling in the blanks.
+
+The resulting directory structure should look like this
+
+```bash
+.
+├── 2015-10-23-calibration.txt
+├── 2015-10-23-dataset1.txt
+├── 2015-10-23-dataset2.txt
+├── 2015-10-23-dataset_overview.txt
+├── 2015-10-26-calibration.txt
+├── 2015-10-26-dataset1.txt
+├── 2015-10-26-dataset2.txt
+├── 2015-10-26-dataset_overview.txt
+├── 2015-11-23-calibration.txt
+├── 2015-11-23-dataset1.txt
+├── 2015-11-23-dataset2.txt
+├── 2015-11-23-dataset_overview.txt
+├── backup
+│ ├── calibration
+│ │ ├── 2015-10-23-calibration.txt
+│ │ ├── 2015-10-26-calibration.txt
+│ │ └── 2015-11-23-calibration.txt
+│ └── datasets
+│ ├── 2015-10-23-dataset1.txt
+│ ├── 2015-10-23-dataset2.txt
+│ ├── 2015-10-23-dataset_overview.txt
+│ ├── 2015-10-26-dataset1.txt
+│ ├── 2015-10-26-dataset2.txt
+│ ├── 2015-10-26-dataset_overview.txt
+│ ├── 2015-11-23-dataset1.txt
+│ ├── 2015-11-23-dataset2.txt
+│ └── 2015-11-23-dataset_overview.txt
+└── send_to_bob
+ ├── all_datasets_created_on_a_23rd
+ │ ├── 2015-10-23-dataset1.txt
+ │ ├── 2015-10-23-dataset2.txt
+ │ ├── 2015-10-23-dataset_overview.txt
+ │ ├── 2015-11-23-dataset1.txt
+ │ ├── 2015-11-23-dataset2.txt
+ │ └── 2015-11-23-dataset_overview.txt
+ └── all_november_files
+ ├── 2015-11-23-calibration.txt
+ ├── 2015-11-23-dataset1.txt
+ ├── 2015-11-23-dataset2.txt
+ └── 2015-11-23-dataset_overview.txt
+```
+
+::::::::::::::: solution
+
+## Solution
+
+```bash
+$ cp *calibration.txt backup/calibration
+$ cp 2015-11-* send_to_bob/all_november_files/
+$ cp *-23-dataset* send_to_bob/all_datasets_created_on_a_23rd/
+```
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Organizing Directories and Files
+
+Jamie is working on a project, and she sees that her files aren't very well organized:
+
+```bash
+$ ls -F
+```
+
+```output
+analyzed/ fructose.dat raw/ sucrose.dat
+```
+
+The `fructose.dat` and `sucrose.dat` files contain output from her data analysis. What command(s) covered in this lesson
+does she need to run so that the commands below will produce the output shown?
+
+```bash
+$ ls -F
+```
+
+```output
+analyzed/ raw/
+```
+
+```bash
+$ ls analyzed
+```
+
+```output
+fructose.dat sucrose.dat
+```
+
+::::::::::::::: solution
+
+## Solution
+
+```bash
+mv *.dat analyzed
+```
+
+Jamie needs to move her files `fructose.dat` and `sucrose.dat` to the `analyzed` directory. The shell will expand
+\*.dat to match all .dat files in the current directory. The `mv` command then moves the list of .dat files to the
+'analyzed' directory.
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Reproduce a folder structure
+
+You're starting a new experiment and would like to duplicate the directory structure from your previous experiment so
+you can add new data.
+
+Assume that the previous experiment is in a folder called `2016-05-18`, which contains a `data` folder that in turn
+contains folders named `raw` and `processed` that contain data files. The goal is to copy the folder structure of the
+`2016-05-18` folder into a folder called `2016-05-20` so that your final directory structure looks like this:
+
+```output
+2016-05-20/
+└── data
+ ├── processed
+ └── raw
+```
+
+Which of the following set of commands would achieve this objective? What would the other commands do?
+
+```bash
+$ mkdir 2016-05-20
+$ mkdir 2016-05-20/data
+$ mkdir 2016-05-20/data/processed
+$ mkdir 2016-05-20/data/raw
+```
+
+```bash
+$ mkdir 2016-05-20
+$ cd 2016-05-20
+$ mkdir data
+$ cd data
+$ mkdir raw processed
+```
+
+```bash
+$ mkdir 2016-05-20/data/raw
+$ mkdir 2016-05-20/data/processed
+```
+
+```bash
+$ mkdir -p 2016-05-20/data/raw
+$ mkdir -p 2016-05-20/data/processed
+```
+
+```bash
+$ mkdir 2016-05-20
+$ cd 2016-05-20
+$ mkdir data
+$ mkdir raw processed
+```
+
+::::::::::::::: solution
+
+## Solution
+
+The first two sets of commands achieve this objective. The first set uses relative paths to create the top-level
+directory before the subdirectories.
+
+The third set of commands will give an error because the default behavior of `mkdir` won't create a subdirectory of a
+non-existent directory: the intermediate level folders must be created first.
+
+The fourth set of commands achieve this objective. Remember, the `-p` option, followed by a path of one or more
+directories, will cause `mkdir` to create any intermediate subdirectories as required.
+
+The final set of commands generates the 'raw' and 'processed' directories at the same level as the 'data' directory.
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+:::::::::::::::::::::::::::::::::::::::: keypoints
+
+- `cp [old] [new]` copies a file.
+- `mkdir [path]` creates a new directory.
+- `mv [old] [new]` moves (renames) a file or directory.
+- `rm [path]` removes (deletes) a file.
+- `*` matches zero or more characters in a filename, so `*.txt` matches all files ending in `.txt`.
+- `?` matches any single character in a filename, so `?.txt` matches `a.txt` but not `any.txt`.
+- Use of the Control key may be described in many ways, including `Ctrl-X`, `Control-X`, and `^X`.
+- The shell does not have a trash bin: once something is deleted, it's really gone.
+- Most files' names are `something.extension`. The extension isn't required, and doesn't guarantee anything, but is
+ normally used to indicate the type of data in the file.
+- Depending on the type of work you do, you may need a more powerful text editor than Nano.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+title: Navigating Files and Directories teaching: 30 exercises: 10
+---
+
+::::::::::::::::::::::::::::::::::::::: objectives
+
+- Explain the similarities and differences between a file and a directory.
+- Translate an absolute path into a relative path and vice versa.
+- Construct absolute and relative paths that identify specific files and directories.
+- Use options and arguments to change the behaviour of a shell command.
+- Demonstrate the use of tab completion and explain its advantages.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+:::::::::::::::::::::::::::::::::::::::: questions
+
+- How can I move around on my computer?
+- How can I see what files and directories I have?
+- How can I specify the location of a file or directory on my computer?
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+:::::::::::::::::::::::::::::::::::::::: instructor
+
+Introducing and navigating the filesystem in the shell (covered in [Navigating Files and Directories](02-filedir.md)
+section) can be confusing. You may have both terminal and GUI file explorer open side by side so learners can see the
+content and file structure while they're using terminal to navigate the system.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+The part of the operating system responsible for managing files and directories is called the **file system**. It
+organizes our data into files, which hold information, and directories (also called 'folders'), which hold files or
+other directories.
+
+Several commands are frequently used to create, inspect, rename, and delete files and directories. To start exploring
+them, we'll go to our open shell window.
+
+First, let's find out where we are by running a command called `pwd` (which stands for 'print working
+directory'). Directories are like *places* — at any time while we are using the shell, we are in exactly one place
+called our **current working directory**. Commands mostly read and write files in the current working directory,
+i.e. 'here', so knowing where you are before running a command is important. `pwd` shows you where you are:
+
+```bash
+$ pwd
+```
+
+```output
+/Users/nelle
+```
+
+Here, the computer's response is `/Users/nelle`, which is Nelle's **home directory**:
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Home Directory Variation
+
+The home directory path will look different on different operating systems. On Linux, it may look like `/home/nelle`,
+and on Windows, it will be similar to `C:\Documents and Settings\nelle` or `C:\Users\nelle`. (Note that it may look
+slightly different for different versions of Windows.) In future examples, we've used Mac output as the default - Linux
+and Windows output may differ slightly but should be generally similar.
+
+We will also assume that your `pwd` command returns your user's home directory. If `pwd` returns something different,
+you may need to navigate there using `cd` or some commands in this lesson will not work as written. See [Exploring
+Other Directories](#exploring-other-directories) for more details on the `cd` command.
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+To understand what a 'home directory' is, let's have a look at how the file system as a whole is organized. For the
+sake of this example, we'll be illustrating the filesystem on our scientist Nelle's computer. After this illustration,
+you'll be learning commands to explore your own filesystem, which will be constructed in a similar way, but not be
+exactly identical.
+
+On Nelle's computer, the filesystem looks like this:
+
+![](fig/filesystem.svg){alt='The file system is made up of a root directory that contains sub-directories titled bin,
+data, users, and tmp'}
+
+The filesystem looks like an upside down tree. The topmost directory is the **root directory** that holds everything
+else. We refer to it using a slash character, `/`, on its own; this character is the leading slash in `/Users/nelle`.
+
+Inside that directory are several other directories: `bin` (which is where some built-in programs are stored), `data`
+(for miscellaneous data files), `Users` (where users' personal directories are located), `tmp` (for temporary files that
+don't need to be stored long-term), and so on.
+
+We know that our current working directory `/Users/nelle` is stored inside `/Users` because `/Users` is the first part
+of its name. Similarly, we know that `/Users` is stored inside the root directory `/` because its name begins with `/`.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Slashes
+
+Notice that there are two meanings for the `/` character. When it appears at the front of a file or directory name, it
+refers to the root directory. When it appears *inside* a path, it's just a separator.
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+Underneath `/Users`, we find one directory for each user with an account on Nelle's machine, her colleagues *imhotep*
+and *larry*.
+
+![](fig/home-directories.svg){alt='Like other directories, home directories are sub-directories underneath "/Users" like
+"/Users/imhotep", "/Users/larry" or"/Users/nelle"'}
+
+The user *imhotep*'s files are stored in `/Users/imhotep`, user *larry*'s in `/Users/larry`, and Nelle's in
+`/Users/nelle`. Nelle is the user in our examples here; therefore, we get `/Users/nelle` as our home directory.
+Typically, when you open a new command prompt, you will be in your home directory to start.
+
+Now let's learn the command that will let us see the contents of our own filesystem. We can see what's in our home
+directory by running `ls`:
+
+```bash
+$ ls
+```
+
+```output
+Applications Documents Library Music Public
+Desktop Downloads Movies Pictures
+```
+
+(Again, your results may be slightly different depending on your operating system and how you have customized your
+filesystem.)
+
+`ls` prints the names of the files and directories in the current directory. We can make its output more comprehensible
+by using the `-F` **option** which tells `ls` to classify the output by adding a marker to file and directory names to
+indicate what they are:
+
+- a trailing `/` indicates that this is a directory
+- `@` indicates a link
+- `*` indicates an executable
+
+Depending on your shell's default settings, the shell might also use colors to indicate whether each entry is a file or
+directory.
+
+```bash
+$ ls -F
+```
+
+```output
+Applications/ Documents/ Library/ Music/ Public/
+Desktop/ Downloads/ Movies/ Pictures/
+```
+
+Here, we can see that the home directory contains only **sub-directories**. Any names in the output that don't have a
+classification symbol are **files** in the current working directory.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Clearing your terminal
+
+If your screen gets too cluttered, you can clear your terminal using the `clear` command. You can still access previous
+commands using ↑ and ↓ to move line-by-line, or by scrolling in your terminal.
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+### Getting help
+
+`ls` has lots of other **options**. There are two common ways to find out how to use a command and what options it
+accepts --- **depending on your environment, you might find that only one of these ways works:**
+
+1. We can pass a `--help` option to any command (available on Linux and Git Bash), for example:
+
+ ```bash
+ $ ls --help
+ ```
+
+2. We can read its manual with `man` (available on Linux and macOS):
+
+ ```bash
+ $ man ls
+ ```
+
+We'll describe both ways next.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Help for built-in commands
+
+Some commands are built in to the Bash shell, rather than existing as separate programs on the filesystem. One example
+is the `cd` (change directory) command. If you get a message like `No manual entry for cd`, try `help cd` instead. The
+`help` command is how you get usage information for [Bash
+built-ins](https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html).
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+#### The `--help` option
+
+Most bash commands and programs that people have written to be run from within bash, support a `--help` option that
+displays more information on how to use the command or program.
+
+```bash
+$ ls --help
+```
+
+```output
+Usage: ls [OPTION]... [FILE]...
+List information about the FILEs (the current directory by default).
+Sort entries alphabetically if neither -cftuvSUX nor --sort is specified.
+
+Mandatory arguments to long options are mandatory for short options, too.
+ -a, --all do not ignore entries starting with .
+ -A, --almost-all do not list implied . and ..
+ --author with -l, print the author of each file
+ -b, --escape print C-style escapes for nongraphic characters
+ --block-size=SIZE scale sizes by SIZE before printing them; e.g.,
+ '--block-size=M' prints sizes in units of
+ 1,048,576 bytes; see SIZE format below
+ -B, --ignore-backups do not list implied entries ending with ~
+ -c with -lt: sort by, and show, ctime (time of last
+ modification of file status information);
+ with -l: show ctime and sort by name;
+ otherwise: sort by ctime, newest first
+ -C list entries by columns
+ --color[=WHEN] colorize the output; WHEN can be 'always' (default
+ if omitted), 'auto', or 'never'; more info below
+ -d, --directory list directories themselves, not their contents
+ -D, --dired generate output designed for Emacs' dired mode
+ -f do not sort, enable -aU, disable -ls --color
+ -F, --classify append indicator (one of */=>@|) to entries
+... ... ...
+```
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Unsupported command-line options
+
+If you try to use an option that is not supported, `ls` and other commands will usually print an error message similar
+to:
+
+```bash
+$ ls -j
+```
+
+```error
+ls: invalid option -- 'j'
+Try 'ls --help' for more information.
+```
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+#### The `man` command
+
+The other way to learn about `ls` is to type
+
+```bash
+$ man ls
+```
+
+This command will turn your terminal into a page with a description of the `ls` command and its options.
+
+To navigate through the `man` pages, you may use ↑ and ↓ to move line-by-line, or try B
+and Spacebar to skip up and down by a full page. To search for a character or word in the `man` pages, use
+/ followed by the character or word you are searching for. Sometimes a search will result in multiple hits.
+If so, you can move between hits using N (for moving forward) and Shift\+N (for moving
+backward).
+
+To **quit** the `man` pages, press Q.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Manual pages on the web
+
+Of course, there is a third way to access help for commands: searching the internet via your web browser. When using
+internet search, including the phrase `unix man page` in your search query will help to find relevant results.
+
+GNU provides links to its [manuals](https://www.gnu.org/manual/manual.html) including the [core GNU
+utilities](https://www.gnu.org/software/coreutils/manual/coreutils.html), which covers many commands introduced within
+this lesson.
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Exploring More `ls` Options
+
+You can also use two options at the same time. What does the command `ls` do when used with the `-l` option? What about
+if you use both the `-l` and the `-h` option?
+
+Some of its output is about properties that we do not cover in this lesson (such as file permissions and ownership), but
+the rest should be useful nevertheless.
+
+::::::::::::::: solution
+
+## Solution
+
+The `-l` option makes `ls` use a **l**ong listing format, showing not only the file/directory names but also additional
+information, such as the file size and the time of its last modification. If you use both the `-h` option and the `-l`
+option, this makes the file size '**h**uman readable', i.e. displaying something like `5.3K` instead of `5369`.
+
+
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Listing in Reverse Chronological Order
+
+By default, `ls` lists the contents of a directory in alphabetical order by name. The command `ls -t` lists items by
+time of last change instead of alphabetically. The command `ls -r` lists the contents of a directory in reverse order.
+Which file is displayed last when you combine the `-t` and `-r` options? Hint: You may need to use the `-l` option to
+see the last changed dates.
+
+::::::::::::::: solution
+
+## Solution
+
+The most recently changed file is listed last when using `-rt`. This can be very useful for finding your most recent
+edits or checking to see if a new output file was written.
+
+
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+### Exploring Other Directories
+
+Not only can we use `ls` on the current working directory, but we can use it to list the contents of a different
+directory. Let's take a look at our `Desktop` directory by running `ls -F Desktop`, i.e., the command `ls` with the
+`-F` **option** and the [**argument**][Arguments] `Desktop`. The argument `Desktop` tells `ls` that we want a listing
+of something other than our current working directory:
+
+```bash
+$ ls -F Desktop
+```
+
+```output
+shell-lesson-data/
+```
+
+Note that if a directory named `Desktop` does not exist in your current working directory, this command will return an
+error. Typically, a `Desktop` directory exists in your home directory, which we assume is the current working directory
+of your bash shell.
+
+Your output should be a list of all the files and sub-directories in your Desktop directory, including the
+`shell-lesson-data` directory you downloaded at the [setup for this lesson](../learners/setup.md). (On most systems, the
+contents of the `Desktop` directory in the shell will show up as icons in a graphical user interface behind all the open
+windows. See if this is the case for you.)
+
+Organizing things hierarchically helps us keep track of our work. While it's possible to put hundreds of files in our
+home directory just as it's possible to pile hundreds of printed papers on our desk, it's much easier to find things
+when they've been organized into sensibly-named subdirectories.
+
+Now that we know the `shell-lesson-data` directory is located in our Desktop directory, we can do two things.
+
+First, using the same strategy as before, we can look at its contents by passing a directory name to `ls`:
+
+```bash
+$ ls -F Desktop/shell-lesson-data
+```
+
+```output
+exercise-data/ north-pacific-gyre/
+```
+
+Second, we can actually change our location to a different directory, so we are no longer located in our home directory.
+
+The command to change locations is `cd` followed by a directory name to change our working directory. `cd` stands for
+'change directory', which is a bit misleading. The command doesn't change the directory; it changes the shell's current
+working directory. In other words it changes the shell's settings for what directory we are in. The `cd` command is
+akin to double-clicking a folder in a graphical interface to get into that folder.
+
+Let's say we want to move into the `exercise-data` directory we saw above. We can use the following series of commands
+to get there:
+
+```bash
+$ cd Desktop
+$ cd shell-lesson-data
+$ cd exercise-data
+```
+
+These commands will move us from our home directory into our Desktop directory, then into the `shell-lesson-data`
+directory, then into the `exercise-data` directory. You will notice that `cd` doesn't print anything. This is normal.
+Many shell commands will not output anything to the screen when successfully executed. But if we run `pwd` after it, we
+can see that we are now in `/Users/nelle/Desktop/shell-lesson-data/exercise-data`.
+
+If we run `ls -F` without arguments now, it lists the contents of
+`/Users/nelle/Desktop/shell-lesson-data/exercise-data`, because that's where we now are:
+
+```bash
+$ pwd
+```
+
+```output
+/Users/nelle/Desktop/shell-lesson-data/exercise-data
+```
+
+```bash
+$ ls -F
+```
+
+```output
+alkanes/ animal-counts/ creatures/ numbers.txt writing/
+```
+
+We now know how to go down the directory tree (i.e. how to go into a subdirectory), but how do we go up (i.e. how do we
+leave a directory and go into its parent directory)? We might try the following:
+
+```bash
+$ cd shell-lesson-data
+```
+
+```error
+-bash: cd: shell-lesson-data: No such file or directory
+```
+
+But we get an error! Why is this?
+
+With our methods so far, `cd` can only see sub-directories inside your current directory. There are different ways to
+see directories above your current location; we'll start with the simplest.
+
+There is a shortcut in the shell to move up one directory level. It works as follows:
+
+```bash
+$ cd ..
+```
+
+`..` is a special directory name meaning "the directory containing this one", or more succinctly, the **parent** of the
+current directory. Sure enough, if we run `pwd` after running `cd ..`, we're back in
+`/Users/nelle/Desktop/shell-lesson-data`:
+
+```bash
+$ pwd
+```
+
+```output
+/Users/nelle/Desktop/shell-lesson-data
+```
+
+The special directory `..` doesn't usually show up when we run `ls`. If we want to display it, we can add the `-a`
+option to `ls -F`:
+
+```bash
+$ ls -F -a
+```
+
+```output
+./ ../ exercise-data/ north-pacific-gyre/
+```
+
+`-a` stands for 'show all' (including hidden files); it forces `ls` to show us file and directory names that begin with
+`.`, such as `..` (which, if we're in `/Users/nelle`, refers to the `/Users` directory). As you can see, it also
+displays another special directory that's just called `.`, which means 'the current working directory'. It may seem
+redundant to have a name for it, but we'll see some uses for it soon.
+
+Note that in most command line tools, multiple options can be combined with a single `-` and no spaces between the
+options; `ls -F -a` is equivalent to `ls -Fa`.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Other Hidden Files
+
+In addition to the hidden directories `..` and `.`, you may also see a file called `.bash_profile`. This file usually
+contains shell configuration settings. You may also see other files and directories beginning with `.`. These are
+usually files and directories that are used to configure different programs on your computer. The prefix `.` is used to
+prevent these configuration files from cluttering the terminal when a standard `ls` command is used.
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+These three commands are the basic commands for navigating the filesystem on your computer: `pwd`, `ls`, and `cd`. Let's
+explore some variations on those commands. What happens if you type `cd` on its own, without giving a directory?
+
+```bash
+$ cd
+```
+
+How can you check what happened? `pwd` gives us the answer!
+
+```bash
+$ pwd
+```
+
+```output
+/Users/nelle
+```
+
+It turns out that `cd` without an argument will return you to your home directory, which is great if you've got lost in
+your own filesystem.
+
+Let's try returning to the `exercise-data` directory from before. Last time, we used three commands, but we can actually
+string together the list of directories to move to `exercise-data` in one step:
+
+```bash
+$ cd Desktop/shell-lesson-data/exercise-data
+```
+
+Check that we've moved to the right place by running `pwd` and `ls -F`.
+
+If we want to move up one level from the data directory, we could use `cd ..`. But there is another way to move to any
+directory, regardless of your current location.
+
+So far, when specifying directory names, or even a directory path (as above), we have been using **relative paths**.
+When you use a relative path with a command like `ls` or `cd`, it tries to find that location from where we are, rather
+than from the root of the file system.
+
+However, it is possible to specify the **absolute path** to a directory by including its entire path from the root
+directory, which is indicated by a leading slash. The leading `/` tells the computer to follow the path from the root of
+the file system, so it always refers to exactly one directory, no matter where we are when we run the command.
+
+This allows us to move to our `shell-lesson-data` directory from anywhere on the filesystem (including from inside
+`exercise-data`). To find the absolute path we're looking for, we can use `pwd` and then extract the piece we need to
+move to `shell-lesson-data`.
+
+```bash
+$ pwd
+```
+
+```output
+/Users/nelle/Desktop/shell-lesson-data/exercise-data
+```
+
+```bash
+$ cd /Users/nelle/Desktop/shell-lesson-data
+```
+
+Run `pwd` and `ls -F` to ensure that we're in the directory we expect.
+
+::::::::::::::::::::::::::::::::::::::::: callout
+
+## Two More Shortcuts
+
+The shell interprets a tilde (`~`) character at the start of a path to mean "the current user's home directory". For
+example, if Nelle's home directory is `/Users/nelle`, then `~/data` is equivalent to `/Users/nelle/data`. This only
+works if it is the first character in the path; `here/there/~/elsewhere` is *not* `here/there/Users/nelle/elsewhere`.
+
+Another shortcut is the `-` (dash) character. `cd` will translate `-` into *the previous directory I was in*, which is
+faster than having to remember, then type, the full path. This is a *very* efficient way of moving *back and forth
+between two directories* -- i.e. if you execute `cd -` twice, you end up back in the starting directory.
+
+The difference between `cd ..` and `cd -` is that the former brings you *up*, while the latter brings you *back*.
+
+***
+
+Try it! First navigate to `~/Desktop/shell-lesson-data` (you should already be there).
+
+```bash
+$ cd ~/Desktop/shell-lesson-data
+```
+
+Then `cd` into the `exercise-data/creatures` directory
+
+```bash
+$ cd exercise-data/creatures
+```
+
+Now if you run
+
+```bash
+$ cd -
+```
+
+you'll see you're back in `~/Desktop/shell-lesson-data`. Run `cd -` again and you're back in
+`~/Desktop/shell-lesson-data/exercise-data/creatures`
+
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Absolute vs Relative Paths
+
+Starting from `/Users/nelle/data`, which of the following commands could Nelle use to navigate to her home directory,
+which is `/Users/nelle`?
+
+1. `cd .`
+2. `cd /`
+3. `cd /home/nelle`
+4. `cd ../..`
+5. `cd ~`
+6. `cd home`
+7. `cd ~/data/..`
+8. `cd`
+9. `cd ..`
+
+::::::::::::::: solution
+
+## Solution
+
+1. No: `.` stands for the current directory.
+2. No: `/` stands for the root directory.
+3. No: Nelle's home directory is `/Users/nelle`.
+4. No: this command goes up two levels, i.e. ends in `/Users`.
+5. Yes: `~` stands for the user's home directory, in this case `/Users/nelle`.
+6. No: this command would navigate into a directory `home` in the current directory if it exists.
+7. Yes: unnecessarily complicated, but correct.
+8. Yes: shortcut to go back to the user's home directory.
+9. Yes: goes up one level.
+
+
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## Relative Path Resolution
+
+Using the filesystem diagram below, if `pwd` displays `/Users/thing`, what will `ls -F ../backup` display?
+
+1. `../backup: No such file or directory`
+2. `2012-12-01 2013-01-08 2013-01-27`
+3. `2012-12-01/ 2013-01-08/ 2013-01-27/`
+4. `original/ pnas_final/ pnas_sub/`
+
+![](fig/filesystem-challenge.svg){alt='A directory tree below the Users directory where "/Users" contains the
+directories "backup" and "thing"; "/Users/backup" contains "original","pnas\_final" and "pnas\_sub"; "/Users/thing"
+contains "backup"; and"/Users/thing/backup" contains "2012-12-01", "2013-01-08" and"2013-01-27"'}
+
+::::::::::::::: solution
+
+## Solution
+
+1. No: there *is* a directory `backup` in `/Users`.
+2. No: this is the content of `Users/thing/backup`, but with `..`, we asked for one level further up.
+3. No: see previous explanation.
+4. Yes: `../backup/` refers to `/Users/backup/`.
+
+
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::: challenge
+
+## `ls` Reading Comprehension
+
+Using the filesystem diagram below, if `pwd` displays `/Users/backup`, and `-r` tells `ls` to display things in reverse
+order, what command(s) will result in the following output:
+
+```output
+pnas_sub/ pnas_final/ original/
+```
+
+![](fig/filesystem-challenge.svg){alt='A directory tree below the Users directory where "/Users" contains the
+directories "backup" and "thing"; "/Users/backup" contains "original","pnas\_final" and "pnas\_sub"; "/Users/thing"
+contains "backup"; and"/Users/thing/backup" contains "2012-12-01", "2013-01-08" and"2013-01-27"'}
+
+1. `ls pwd`
+2. `ls -r -F`
+3. `ls -r -F /Users/backup`
+
+::::::::::::::: solution
+
+## Solution
+
+1. No: `pwd` is not the name of a directory.
+2. Yes: `ls` without directory argument lists files and directories in the current directory.
+3. Yes: uses the absolute path explicitly.
+
+
+
+:::::::::::::::::::::::::
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+## General Syntax of a Shell Command
+
+We have now encountered commands, options, and arguments, but it is perhaps useful to formalise some terminology.
+
+Consider the command below as a general example of a command, which we will dissect into its component parts:
+
+```bash
+$ ls -F /
+```
+
+![](fig/shell_command_syntax.svg){alt='General syntax of a shell command'}
+
+`ls` is the **command**, with an **option** `-F` and an **argument** `/`. We've already encountered options which
+either start with a single dash (`-`), known as **short options**, or two dashes (`--`), known as **long options**.
+[Options] change the behavior of a command and [Arguments] tell the command what to operate on (e.g. files and
+directories). Sometimes options and arguments are referred to as **parameters**. A command can be called with more
+than one option and more than one argument, but a command doesn't always require an argument or an option.
+
+You might sometimes see options being referred to as **switches** or **flags**, especially for options that take no
+argument. In this lesson we will stick with using the term *option*.
+
+Each part is separated by spaces. If you omit the space between `ls` and `-F` the shell will look for a command called
+`ls-F`, which doesn't exist. Also, capitalization can be important. For example, `ls -s` will display the size of files
+and directories alongside the names, while `ls -S` will sort the files and directories by size, as shown below:
+
+```bash
+$ cd ~/Desktop/shell-lesson-data
+$ ls -s exercise-data
+```
+
+```output
+total 28
+ 4 animal-counts 4 creatures 12 numbers.txt 4 alkanes 4 writing
+```
+
+Note that the sizes returned by `ls -s` are in *blocks*. As these are defined differently for different operating
+systems, you may not obtain the same figures as in the example.
+
+```bash
+$ ls -S exercise-data
+```
+
+```output
+animal-counts creatures alkanes writing numbers.txt
+```
+
+Putting all that together, our command `ls -F /` above gives us a listing of files and directories in the root directory
+`/`. An example of the output you might get from the above command is given below:
+
+```bash
+$ ls -F /
+```
+
+```output
+Applications/ System/
+Library/ Users/
+Network/ Volumes/
+```
+
+
+::::::::::::::::::::::::::::::::::::::::: callout
+### When to use short or long options
+When options exist as both short and long options:
+
+- Use the short option when typing commands directly into the shell to minimize keystrokes and get your task done
+ faster.
+- Use the long option in scripts to provide clarity. It will be read many times and typed once.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+### Nelle's Pipeline: Organizing Files
+
+Knowing this much about files and directories, Nelle is ready to organize the files that the protein assay machine will
+create.
+
+She creates a directory called `north-pacific-gyre` (to remind herself where the data came from), which will contain the
+data files from the assay machine and her data processing scripts.
+
+Each of her physical samples is labelled according to her lab's convention with a unique ten-character ID, such as
+'NENE01729A'. This ID is what she used in her collection log to record the location, time, depth, and other
+characteristics of the sample, so she decides to use it within the filename of each data file. Since the output of the
+assay machine is plain text, she will call her files `NENE01729A.txt`, `NENE01812A.txt`, and so on. All 1520 files will
+go into the same directory.
+
+Now in her current directory `shell-lesson-data`, Nelle can see what files she has using the command:
+
+```bash
+$ ls north-pacific-gyre/
+```
+
+This command is a lot to type, but she can let the shell do most of the work through what is called **tab completion**.
+If she types:
+
+```bash
+$ ls nor
+```
+
+and then presses Tab (the tab key on her keyboard), the shell automatically completes the directory name for
+her:
+
+```bash
+$ ls north-pacific-gyre/
+```
+
+Pressing Tab again does nothing, since there are multiple possibilities; pressing Tab twice brings
+up a list of all the files.
+
+If Nelle then presses G and then presses Tab again, the shell will append 'goo' since all files
+that start with 'g' share the first three characters 'goo'.
+
+```bash
+$ ls north-pacific-gyre/goo
+```
+
+To see all of those files, she can press Tab twice more.
+
+```bash
+ls north-pacific-gyre/goo
+goodiff.sh goostats.sh
+```
+
+This is called **tab completion**, and we will see it in many other tools as we go on.
+
+
+
+[Arguments]: https://swcarpentry.github.io/shell-novice/reference.html#argument
+
+
+:::::::::::::::::::::::::::::::::::::::: keypoints
+
+- The file system is responsible for managing information on the disk.
+- Information is stored in files, which are stored in directories (folders).
+- Directories can also store other directories, which then form a directory tree.
+- `pwd` prints the user's current working directory.
+- `ls [path]` prints a listing of a specific file or directory; `ls` on its own lists the current working directory.
+- `cd [path]` changes the current working directory.
+- Most commands take options that begin with a single `-`.
+- Directory names in a path are separated with `/` on Unix, but `\` on Windows.
+- `/` on its own is the root directory of the whole file system.
+- An absolute path specifies a location from the root of the file system.
+- A relative path specifies a location starting from the current location.
+- `.` on its own means 'the current directory'; `..` means 'the directory above the current one'.
+
+::::::::::::::::::::::::::::::::::::::::::::::::::
+
+
+
+This chapter is from "[Software Carpentry The Unix Shell][swcarpentry-unix]". It is licensed under the
+[CC-BY-4.0][cc-by-4].
+
+
+[swcarpentry-unix]: https://swcarpentry.github.io/shell-novice/
+[cc-by-4]: https://creativecommons.org/licenses/by-sa/4.0/
diff --git a/config.yaml b/config.yaml
index 5248792..0d71bd2 100644
--- a/config.yaml
+++ b/config.yaml
@@ -59,7 +59,10 @@ contact: 'topostats@sheffield.ac.uk' # FIXME
# Order of episodes in your lesson
episodes:
-- introduction.md
+- 01-command-line.md
+- 02-filedir.md
+- 03-create.md
+# - introduction.md
# Information for Learners
learners:
diff --git a/fig/filesystem-challenge.odg b/fig/filesystem-challenge.odg
new file mode 100644
index 0000000..c3bf252
Binary files /dev/null and b/fig/filesystem-challenge.odg differ
diff --git a/fig/filesystem-challenge.svg b/fig/filesystem-challenge.svg
new file mode 100644
index 0000000..1b79540
--- /dev/null
+++ b/fig/filesystem-challenge.svg
@@ -0,0 +1,763 @@
+
+
diff --git a/fig/filesystem.svg b/fig/filesystem.svg
new file mode 100644
index 0000000..1a024b8
--- /dev/null
+++ b/fig/filesystem.svg
@@ -0,0 +1,286 @@
+
+
+
+
diff --git a/fig/find-file-tree.odg b/fig/find-file-tree.odg
new file mode 100644
index 0000000..2cb7214
Binary files /dev/null and b/fig/find-file-tree.odg differ
diff --git a/fig/find-file-tree.svg b/fig/find-file-tree.svg
new file mode 100644
index 0000000..d830af7
--- /dev/null
+++ b/fig/find-file-tree.svg
@@ -0,0 +1,792 @@
+
+
+
+
diff --git a/fig/home-directories.svg b/fig/home-directories.svg
new file mode 100644
index 0000000..9ae124e
--- /dev/null
+++ b/fig/home-directories.svg
@@ -0,0 +1,518 @@
+
+
+
+
diff --git a/fig/homedir.odg b/fig/homedir.odg
new file mode 100644
index 0000000..f81b366
Binary files /dev/null and b/fig/homedir.odg differ
diff --git a/fig/nano-screenshot.png b/fig/nano-screenshot.png
new file mode 100644
index 0000000..50fb171
Binary files /dev/null and b/fig/nano-screenshot.png differ
diff --git a/fig/redirects-and-pipes.svg b/fig/redirects-and-pipes.svg
new file mode 100644
index 0000000..f65786e
--- /dev/null
+++ b/fig/redirects-and-pipes.svg
@@ -0,0 +1,71 @@
+
+
diff --git a/fig/shell_command_syntax.svg b/fig/shell_command_syntax.svg
new file mode 100644
index 0000000..a32b8f9
--- /dev/null
+++ b/fig/shell_command_syntax.svg
@@ -0,0 +1,47 @@
+
+
+
+
diff --git a/fig/shell_script_for_loop_flow_chart.svg b/fig/shell_script_for_loop_flow_chart.svg
new file mode 100644
index 0000000..028fb0d
--- /dev/null
+++ b/fig/shell_script_for_loop_flow_chart.svg
@@ -0,0 +1,913 @@
+
+
+
+
\ No newline at end of file
diff --git a/fig/standard-filesystem-hierarchy.svg b/fig/standard-filesystem-hierarchy.svg
new file mode 100644
index 0000000..ba798b0
--- /dev/null
+++ b/fig/standard-filesystem-hierarchy.svg
@@ -0,0 +1,1534 @@
+
+
+
+
diff --git a/introduction.md b/introduction.md
deleted file mode 100644
index 7065d23..0000000
--- a/introduction.md
+++ /dev/null
@@ -1,114 +0,0 @@
----
-title: "Using Markdown"
-teaching: 10
-exercises: 2
----
-
-:::::::::::::::::::::::::::::::::::::: questions
-
-- How do you write a lesson using Markdown and `{sandpaper}`?
-
-::::::::::::::::::::::::::::::::::::::::::::::::
-
-::::::::::::::::::::::::::::::::::::: objectives
-
-- Explain how to use markdown with The Carpentries Workbench
-- Demonstrate how to include pieces of code, figures, and nested challenge blocks
-
-::::::::::::::::::::::::::::::::::::::::::::::::
-
-## Introduction
-
-This is a lesson created via The Carpentries Workbench. It is written in
-[Pandoc-flavored Markdown](https://pandoc.org/MANUAL.txt) for static files and
-[R Markdown][r-markdown] for dynamic files that can render code into output.
-Please refer to the [Introduction to The Carpentries
-Workbench](https://carpentries.github.io/sandpaper-docs/) for full documentation.
-
-What you need to know is that there are three sections required for a valid
-Carpentries lesson:
-
- 1. `questions` are displayed at the beginning of the episode to prime the
- learner for the content.
- 2. `objectives` are the learning objectives for an episode displayed with
- the questions.
- 3. `keypoints` are displayed at the end of the episode to reinforce the
- objectives.
-
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: instructor
-
-Inline instructor notes can help inform instructors of timing challenges
-associated with the lessons. They appear in the "Instructor View"
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
-::::::::::::::::::::::::::::::::::::: challenge
-
-## Challenge 1: Can you do it?
-
-What is the output of this command?
-
-```r
-paste("This", "new", "lesson", "looks", "good")
-```
-
-:::::::::::::::::::::::: solution
-
-## Output
-
-```output
-[1] "This new lesson looks good"
-```
-
-:::::::::::::::::::::::::::::::::
-
-
-## Challenge 2: how do you nest solutions within challenge blocks?
-
-:::::::::::::::::::::::: solution
-
-You can add a line with at least three colons and a `solution` tag.
-
-:::::::::::::::::::::::::::::::::
-::::::::::::::::::::::::::::::::::::::::::::::::
-
-## Figures
-
-You can use standard markdown for static figures with the following syntax:
-
-`![optional caption that appears below the figure](figure url){alt='alt text for
-accessibility purposes'}`
-
-![You belong in The Carpentries!](https://raw.githubusercontent.com/carpentries/logo/master/Badge_Carpentries.svg){alt='Blue Carpentries hex person logo with no text.'}
-
-::::::::::::::::::::::::::::::::::::: callout
-
-Callout sections can highlight information.
-
-They are sometimes used to emphasise particularly important points
-but are also used in some lessons to present "asides":
-content that is not central to the narrative of the lesson,
-e.g. by providing the answer to a commonly-asked question.
-
-::::::::::::::::::::::::::::::::::::::::::::::::
-
-
-## Math
-
-One of our episodes contains $\LaTeX$ equations when describing how to create
-dynamic reports with {knitr}, so we now use mathjax to describe this:
-
-`$\alpha = \dfrac{1}{(1 - \beta)^2}$` becomes: $\alpha = \dfrac{1}{(1 - \beta)^2}$
-
-Cool, right?
-
-::::::::::::::::::::::::::::::::::::: keypoints
-
-- Use `.md` files for episodes when you want static content
-- Use `.Rmd` files for episodes when you need to generate output
-- Run `sandpaper::check_lesson()` to identify any issues with your lesson
-- Run `sandpaper::build_lesson()` to preview your lesson locally
-
-::::::::::::::::::::::::::::::::::::::::::::::::
-
-[r-markdown]: https://rmarkdown.rstudio.com/
diff --git a/md5sum.txt b/md5sum.txt
index de2300d..79b19ca 100644
--- a/md5sum.txt
+++ b/md5sum.txt
@@ -1,11 +1,13 @@
"file" "checksum" "built" "date"
"CODE_OF_CONDUCT.md" "c93c83c630db2fe2462240bf72552548" "site/built/CODE_OF_CONDUCT.md" "2024-01-08"
"LICENSE.md" "b24ebbb41b14ca25cf6b8216dda83e5f" "site/built/LICENSE.md" "2024-01-08"
-"config.yaml" "8b5eb93fb1a6714e2dfbcf08e1686b5c" "site/built/config.yaml" "2024-01-12"
+"config.yaml" "ef77f9782e72c52401ee4cd60ae36581" "site/built/config.yaml" "2024-01-29"
"index.md" "32ded82e3af3920844de9879f05cc873" "site/built/index.md" "2024-01-26"
"links.md" "8184cf4149eafbf03ce8da8ff0778c14" "site/built/links.md" "2024-01-08"
-"episodes/introduction.md" "6c55d31b41d322729fb3276f8d4371fc" "site/built/introduction.md" "2024-01-08"
+"episodes/01-command-line.md" "b0e00df5274eb130f7872a9896b976ff" "site/built/01-command-line.md" "2024-01-29"
+"episodes/02-filedir.md" "e64617a09bb50fc08a24213e7d8f4868" "site/built/02-filedir.md" "2024-01-29"
+"episodes/03-create.md" "bbea2486b75532c2252d1167039c903c" "site/built/03-create.md" "2024-01-29"
"instructors/instructor-notes.md" "69e9a8d25797039f14984f17abc80042" "site/built/instructor-notes.md" "2024-01-26"
-"learners/reference.md" "1c7cc4e229304d9806a13f69ca1b8ba4" "site/built/reference.md" "2024-01-08"
+"learners/reference.md" "51f5c5ea490496c21406ae9a67860bb7" "site/built/reference.md" "2024-01-29"
"learners/setup.md" "8ae366f9ee33e5f83c28d7b4d4765aa8" "site/built/setup.md" "2024-01-26"
"profiles/learner-profiles.md" "60b93493cf1da06dfd63255d73854461" "site/built/learner-profiles.md" "2024-01-08"
diff --git a/reference.md b/reference.md
index ba26b9f..40c72db 100644
--- a/reference.md
+++ b/reference.md
@@ -4,5 +4,72 @@ title: 'Reference'
## Glossary
-This is a placeholder file. Please add content here.
+### A
++ **AFM** Atomic Force Microscopy
+
+### B
+
+### C
+
++ **Conda** a package for managing reproducible virtual environments.
+
+### D
+
+### E
+
+### F
+
+### G
+
++ **Grain** the term used for image molecules.
+
+### H
+
+### I
+
+### J
+
+### K
+
+### L
+
+### M
+
+### N
+
+### O
+
+### P
+
++ **Python** a general purpose interpreted programming language. See [Python.org][python].
+
+### Q
+
+### R
+
+### S
+
+### T
+
++ **TopoStats** software written in Python for batch processing images.
+
++ **Tracing** obtaining a single-pixel width outline of the detected molecules.
+
+### U
+
+### V
+
+### W
+
+### X
+
+### Y
+
++ **YAML** a recursive acronym (YAML Ain't Markup Language) it is ASCII plain text files that is used for configuring
+ how TopoStats will process images.
+
+### Z
+
+
+[python]: https://www.python.org