Linux cp command - how to copy file and directory in Linux

'cp' is a Linux command used to copy files and directories in Linux command line terminal. To copy file means to duplicate a file or make an extra copy of a file. The Linux cp command is quite important and used frequently when we work in the command line terminal. Normally, we use Linux cp command to backup a file. A situation example is when we are going to edit an important file such as a server configuration file. We can either copy one file to a given destination, or copy many files to a destination directory.

Linux cp command syntax

A command syntax is a synopsis, the format on how to issue the command to do specific task. We can check Linux cp command syntax using the 'man cp' command. Here is a part of the cp command's manual page:

NAME
       cp - copy files and directories

SYNOPSIS
       cp [OPTION]... [-T] SOURCE DEST
       cp [OPTION]... SOURCE... DIRECTORY
       cp [OPTION]... -t DIRECTORY SOURCE...

DESCRIPTION
       Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

If you are really a Linux beginner and cannot understand the synopsis in manual page above, below are the Linux cp command syntax which we can use to copy file or directory in Linux system:

Linux cp command syntax to copy a single file or directory:
cp [option] SOURCE DESTINATION

Here are the cp command syntax explanations:

  • [option] - options available that we can used to customize cp command.
  • SOURCE - the original file (or directory). Provide a full directory path if you are running cp command from other directory.
  • DESTINATION - the new target or directory to put the duplicate file (or directory).

Linux cp command syntax to copy multiple files:
cp [option] [SOURCE1 SOURCE2 SOURCE3 ...] DESTINATION

The [SOURCE1 SOURCE2 SOURCE3 ...] is multiple files that are going to be copied. If sources are from different directories, you have to provide a complete path for each source.

Here are important Linux cp command options that regularly used by Linux users to copy files in Linux system:

  -f, --force                  if an existing destination file cannot be
                                 opened, remove it and try again
  -i, --interactive            prompt before overwrite
  -R, -r, --recursive          copy directories recursively
   -s, --symbolic-link          make symbolic links instead of copying
  -u, --update                 copy only when the SOURCE file is newer
                                 than the destination file or when the
                                 destination file is missing
  -v, --verbose                explain what is being done
      --help     display this help and exit

Let's see how to use the cp options above with some examples.

Linux cp command examples

Here are examples and explanations on how to copy files and directories in Linux system.

Linux copy file examples

The Linux cp command's option is not mandatory if we want to copy files only. The cp command can be used without any option. See the Linux copy file example below:

luzar@slackware:~/etc$ cp BUKUMERAH-BM.pdf ../examples/ 

In the example above, BUKUMERAH-BM.pdf is the source file that we want to copy. The '../example' is the destination directory. If you wonder why there is a '..' before the /example, the explanation is, the '..' is a 'path' for the destination directory. The '..' means the /example directory is one directory above the current directory we are working now. We can also write the full path like '/home/luzar/examples/'. You can check Linux file system structure overview for more information about Linux directory.

Our next example is to use Linux cp command to copy multiple files to a target directory. Here is the example:

luzar@slackware:~/etc$ cp -i UserManual.pdf BUKUMERAH-BM.pdf /home/luzar/examples/ 
cp: overwrite `/home/luzar/examples/BUKUMERAH-BM.pdf'? n 

When we use '-i' option with the cp command, it will prompt us if the file we are copying already exist in the destination directory, so we can confirm whether to overwrite it or not. You can answer with y (yes) or n (No). Notice that this time we used a full path for the destination directory.

We can also force Linux to copy file using the 'cp -f' command. Here is the example:

luzar@slackware:~$ cp -f examples/new-file.txt examples/awareness/

Another example of Linux cp option usage is the 'cp -s', which makes a symbolic links instead of copying the real file. The command syntax is different here. When using cp with -s option, we mention the target file first followed by the name of the symbolic link. Here is the example:

luzar@slackware:~$ cd examples/
luzar@slackware:~/examples$ ls
awareness  errors.txt  linux-manual.txt  new-file.txt
luzar@slackware:~/examples$ rm new-file.txt 
luzar@slackware:~/examples$ cp -s awareness/new-file.txt new-file.txt
luzar@slackware:~/examples$ ls -l
total 40
drwxr-xr-x 2 luzar users  4096 2009-11-03 20:55 awareness
-rw-r--r-- 1 luzar users    53 2009-07-13 14:11 errors.txt
-rw-r--r-- 1 luzar users 30804 2009-07-13 13:22 linux-manual.txt
lrwxrwxrwx 1 luzar users    22 2009-11-03 21:10 new-file.txt -> awareness/new-file.txt

Here is the explanation. First I change directory to the example directory and delete a file named 'new-file.txt, the file that I forcefully copied in the Linux copy file example earlier. Then I use the 'cp -s' command to create a symbolic link in the current directory pointing to the original file in awareness directory.

Linux copy directory examples

We can also use Linux cp command to copy a directory. The '-R' or 'r' option is needed to recursively copy the subdirectory and files in that directory. See the Linux cp example below on how to copy directory in Linux system:

luzar@slackware:~$ cp -r slackware examples/ 
luzar@slackware:~$ ls -l examples/ 
total 3940
-rw-r--r-- 1 luzar users  113556 2009-02-25 23:13 BUKUMERAH-BM.pdf
-rw-r--r-- 1 luzar users 3903990 2009-02-25 23:29 UserManual.pdf
drwxr-xr-x 2 luzar users    4096 2009-02-25 23:39 slackware/
luzar@slackware:~$ 

In the example above, we copy a directory named slackware to another directory named examples.

We can verbosely copy a directory to see what files and directories have been copied. Invoke cp with -v from the command prompt will print details about what happens. See Linux cp example below:

luzar@slackware:~$ cp -rv awareness/ examples/
`awareness/' -> `examples/awareness'
`awareness/iklan.png' -> `examples/awareness/iklan.png'
`awareness/syarat-diploma.png' -> `examples/awareness/syarat-diploma.png'
`awareness/permohonan01.png' -> `examples/awareness/permohonan01.png'
`awareness/bpkkedumy.png' -> `examples/awareness/bpkkedumy.png'
`awareness/syarat_permohonan.png' -> `examples/awareness/syarat_permohonan.png'
`awareness/cara_memohon.png' -> `examples/awareness/cara_memohon.png'
`awareness/info_sijil.png' -> `examples/awareness/info_sijil.png'
`awareness/eborang.png' -> `examples/awareness/eborang.png'
luzar@slackware:~$ 

This is an example of the Linux cp command with '-u' option. The cp -u copy only when the SOURCE file is newer than the destination file or when the destination file is missing:

luzar@slackware:~$  touch awareness/newfile.txt
luzar@slackware:~$  cp -rvu awareness/ examples/
`awareness/newfile.txt' -> `examples/awareness/newfile.txt'
luzar@slackware:~$ 

To show how 'cp -u' command works, we create a new file in the awareness directory (touch awareness/newfile.txt). When we invoke cp -rvu awareness/ examples/, only the 'newfile.txt' which is the new file were copied. Don't worry about duplicate file or directory.

Here is another example on how to use Linux copy command to copy file and directory in Linux command line terminal. Example below shows how to copy file to the current directory:

First, here is an example content of a directory named 'awareness':

luzar@slackware:~$  cd awareness/
luzar@slackware:~/awareness$  ls ../Desktop/kursus/
configuration.php  images    search-engine-optimization-starter-guide.pdf
ebooks             notes     templates
extensions         releases  training-workflow.odt
luzar@slackware:~/awareness$

If I want to copy 'configuration.php' file to the current directory, the copy command would be like the example below:

luzar@slackware:~/awareness$  cp ../Desktop/kursus/configuration.php .
luzar@slackware:~/awareness$  ls
bpkkedumy.png      eborang.png     newfile.txt         syarat_permohonan.png
cara_memohon.png   iklan.png       permohonan01.png
configuration.php  info_sijil.png  syarat-diploma.png
luzar@slackware:~/awareness$

The symbol '.' represents current directory.

To copy the whole directory to the current directory, we can use the same method but with -r option added. See the example below:

luzar@slackware:~/awareness$  cp -r ../Desktop/kursus/ .
luzar@slackware:~/awareness$  ls
bpkkedumy.png      eborang.png     kursus            syarat-diploma.png
cara_memohon.png   iklan.png       newfile.txt       syarat_permohonan.png
configuration.php  info_sijil.png  permohonan01.png
luzar@slackware:~/awareness$

That's all the copy command examples in Linux command line terminal. The important thing to remember about Linux cp command is, to copy a Linux directory, you have to provide the -r or -R option(switch). It's optional to use an option(or arguments) with cp command to copy file depends on your need.

The different between Linux cp command and Linux mv command is, the cp command duplicate the source file and move it to a new location while the mv command move the source (original) file. So the Linux cp command is the perfect choice to backup files and directories in Linux system.

Back to Linux basic commands main page.


Post new comment

The content of this field is kept private and will not be shown publicly.
This blog uses the CommentLuv Drupal plugin which will try and parse your sites feed and display a link to your last post, please be patient while it tries to find it for you.

Custom Search