First, go into the
cs580 directory we created last time.
Before we start moving and copying files we should create one. To do that we will use the command-line text editor
nano, which is standard on any Linux/Unix system.
Let's create a new file called
$ nano my_new_file.txt
Type some stuff and then save the file and exit the program.
We can view the contents of the file without having to invoke the editor by using the
$ more my_new_file.txt
less is more powerful than
more and has a few additional features.
Now, to demonstrate why it's not a good idea to use spaces in file names, try the following:
$ nano my new file.txt
And type ctrl-x and observe what happens.
Today we are going to use the following commands:
We already started using mkdir and rmdir, so we will focus on the three others. And let's start with cp. There are two forms for the cp command:
cp source_file target_file cp source_file ... target_directory
In the first form, cp copies the contents of the source_file to the target_file. For example:
$ cp my_new_file.txt another_new_file.txt
$ cp my_new_file.txt ../yet_another_new_file.txt
which copies the file under a new name into the parent directory of your current working directory.
The second form of cp copies each each source_file to the destination target_directory. The names of the files themselves are not changed. If cp detects an attempt to copy a file to itself, the copy will fail. Now let's see some examples:
$ cp my_new_file.txt /home/asa
which can also be written as
cp my_new_file.txt ~.
You can also copy a file to the current working directory, abbreviated as
$ cp ../yet_another_new_file.txt .
Using this form of the command you can copy multiple files at the same time:
$ cp my_new_file.txt another_new_file.txt /home/asa
cp has a lot of options. Let's look at one of them - the
-R option. Try the following: in your home directory type the command
$ cp -R cs580 copy_of_cs580
What did it do?
Time to clean up a bit … Let's remove the files from the
copy_of_cs580 directory and the directory itself. We'll do that with the
rm command. You can remove individual files and then the directory itself:
$ rm copy_of_cs580/my_new_file.txt $ rmdir copy_of_cs580
or you can use the
-R option of rm:
$ rm -R copy_of_cs580
Be very careful with “rm”. Linux does not have a way of undoing its action. As a way of addressing that, it is not a bad idea to use the -i option of rm, which will ask you to verify each removed file/directory. It can be combined with other options, e.g.:
$ rm -Ri copy_of_cs580
Like the cp command, the mv command has two general forms:
mv source target mv source ... directory
Let's look at an example of the first one:
$ mv my_new_file.txt new_file.txt
And the second one:
$ mv new_file ..
The first one changes the name of the file, while the second moves the file to a different directory.
While you can do all these things quite easily with a graphical file manager, doing it from the command line provides extra flexibility. This flexibility comes from the use of wildcards.
Wildcards enable you to select multiple files/directories at once.
The most commonly used wildcard is the
*, which matches any characters.
So, if we would like to see all the names of all files which end with
.txt we would issue the following ls command:
$ ls *.txt
$ ls m*.txt
will list all files whose names begin with
m and end with
Wildcards can be used in conjunction with any of the commands we looked at. For example:
$ cp directory1/* directory2
will copy all the files from
There are many more wild cards that are recognized. For example
? matches a single character, so
data??? will match file names that start with data and are followed by any three characters. Chapter 4 of the book provides more information on this topic.
Be especially careful when using wildcards with
rm: first use the
ls command with the wildcard to verify which files will be affected.
Consider for example the following command:
rm * .html
It will remove all your files (and then complain that the file .html does not exist).