Working with files and directories

Now that you know how to move around in the system, we can try making changes to it.

First, let’s navigate to our Desktop.

Input

cd Desktop
pwd

Output

/Users/egrguric/desktop

Creating a directory

Let’s try creating a directory and moving into it.

Input

mkdir myfirstdirectory
ls

Output

829-0.txt                   2014-01_JA.tsv               2014-01-31_JA-africa.tsv
2014-01-31_JA-america.tsv   2014-02-02_JA-britain.tsv    000003160_01_text.json
33504-0.txt                 diary.html                   myfirstdirectory
pg514.txt

You can see there is now a new directory in the same location. If we try going into it we will see that it’s empty.

There is also a handy way to see this change visually.

Input

open .

Output

Finder window with empty directory

Creating a file

Now let’s create a file using the touch command.

When naming files, it is customary to follow the convention of filename.extension, where the extension denotes the file type. For instance, a .txt extension indicates a plain text file, while a .png extension signifies a PNG image file, and so on. Each file type has its own specific encoding, and it should be opened using an application capable of decoding that particular format. By using the correct file extension, the operating system recognizes the file type and attempts to open it with the appropriate application. This ensures that the file is processed correctly, utilizing the intended software for viewing, editing, or executing its contents.

Input

touch myfile.txt
ls

Output

829-0.txt                   2014-01_JA.tsv               2014-01-31_JA-africa.tsv
2014-01-31_JA-america.tsv   2014-02-02_JA-britain.tsv    000003160_01_text.json
33504-0.txt                 diary.html                   myfirstdirectory
pg514.txt                   myfile.txt

Please note that when working with the command-line interpreter, spaces in file and directory names can be misinterpreted as separators between arguments. To avoid confusion or errors, avoid using spaces in file and directory names. Instead, consider using dashes (-) or underscores (_). If you need to reference file or directory names that contain spaces or special characters, enclose the name within quotation marks (""). This ensures that the interpreter correctly recognizes the entire name as a single entity. Following these practices will help prevent unexpected behavior or issues when working with files and directories through the command line.

Editing a file

There are built-in text editors accessible through the shell. These editors are handy if you need to make a quick change from the shell or want to avoid having to open another program while you are working in the terminal. Nano is a commonly used text editor.

Input

nano myfile.txt

You’ll see that this brings up the nano text editor in the command-line interface so you can modify the file. While nano may not be as powerful and flexible as other text editors, it serves as a convenient option for basic editing tasks. It’s pre-installed on Unix shells, and this makes it particularly useful for editing text files on remote machines. If you’re interested in exploring different text editors and expanding your knowledge, check out the Introduction to Development Environment workshop.

Moving, copying, and deleting files and directories

Now let’s try moving our new file into our new directory to organize things a bit.

Input

mv myfile.txt myfirstdirectory
cd myfirstdirectory
ls

Output

myfile.txt

The first argument contains the file we are moving, and the second one is where it should go. To rename a file, you can use the new name as the destination in a mv command.

Input

mv myfile.txt mynewfile.txt
ls

Output

mynewfile.txt

Note: Be careful when specifying the file name. mv silently overwrites any existing files with the same name and could cause data loss. With the -i option, you can set mv to ask for confirmation before writing.

The cp command lets you copy files, for example, if you want to create a backup, and it works very much like mv.

Input

cp mynewfile.txt backup_mynewfile.txt

You can use the -r option to copy a directory and all its contents. -r specifies recursive copying.

You can delete files with the rm command, which stands for remove.

Input

rm backup_mynewfile.txt
ls

Output

mynewfile.txt

You can also delete directories, but that requires an additional (and dangerous) flag. -r stands for “recursive”, which essentially tells the command rm to keep going through all of the files that are inside the directory until there’s nothing left. Be careful when using this option, as the Unix shell does not have a trash bin and deleted files are unlinked from the file system. Tools for finding and recovering deleted files exist, but there is no guarantee they will work in any particular situation.

Note: With the -i option, the shell prompts before removal, giving us a chance to check that we are deleting only the files we want to remove.

Input

cd ..
ls
rm -r myfirstdirectory
ls

Output


Using wildcards

* is a wildcard, which matches zero or more characters. When the shell sees a wildcard, it expands the wildcard and creates a list of matching file names before running the command. For example, if you want to copy all the PDF files in a directory, you can run the following command:

Input

cp firstdirectory/*.pdf seconddirectory/

Reading files

Let’s make a few files to work with for the next activity.

Sometimes you want to get a more in-depth sense of what is in the files in a directory.

We’ve already talked a bit about looking at the information about the files.

Input

touch file1.txt file2.txt file3.txt file4.txt

Output

file1.txt
file2.txt
file3.txt
file4.txt

Input

ls -lh

But you can also quickly open the entire file from the command line. The cat command gets its name from “concatenate” and prints the contents of files on the screen.

Input

cat file1.txt

Output


Input

nano file1.txt

Output

My super secret plan.

Part 1

Part 2

Part 3

Part 4

Part 5

If the file is large, you might want to get only the first few lines. We can run another command called head for that. Using -n 5 option with head tells it to print only the first 5 lines of the file. The command head defaults to showing the first ten lines in a file.

Input

head file1.txt

Output

My super secret plan.

Step 1

Step 2

Step 3

Step 4

You can use this method to quickly view all files of a certain type in a directory.

Input

head *.txt

Or only the first line of all of the files, which might be useful if there are a lot of them.

Input

head -n1 *.txt

tail works similarly and prints the end of your files.

Input

tail file1.txt

Output


Step 3

Step 4

Step 5

Step 6

World domination!

less can be used to read the content of a file one screen at a time.

Input

less file1.txt

Output

My super secret plan.

Step 1

Step 2

Step 3

Step 4

Step 5
:

Use the Enter key to move through the file and q to quit or exit the file.

Finding things

grep is the name of a very useful command-line program that searches within files for a particular pattern. For example, to find lines that contain the number 3 in our file, we run:

Input

grep 3 file1.txt

Output

Step 3

To search for a phrase, we should put the phrase in quotes.

While grep finds lines in files, the find command finds files within directories.

Input

find .

Since . means the current working directory, find’s output is the names of all the files and directories under the current working directory. With the -name option, we can specify conditions on the names of the files or directories:

Input

find . -name '*.txt'

View in GitHub

Loading last updated date...