Linux cp/copy命令详解

在Linux中,cp命令是用于复制文件或目录的命令。它可以将一个或多个文件或目录从一个位置复制到另一个位置。

命令格式

cp [OPTION]…   [-T] SOURCE DEST
cp [OPTION]…   SOURCE…   DIRECTORY
cp [OPTION]…   -t DIRECTORY   SOURCE…

参数说明:

-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。

下面是cp命令的常用选项和示例:

1、复制单个文件到目标目录:

cp source_file destination_directory

示例:

cp file.txt /home/user1/

2、复制多个文件到目标目录:

cp source_file1 source_file2 ... source_fileN destination_directory

示例:

cp file1.txt file2.txt file3.txt /home/user1/

3、复制目录及其内容到目标目录:

cp -r source_directory destination_directory

示例:

cp -r /home/user1/mydir /home/user2/

4、强制覆盖目标文件:

cp -f source_file destination_directory

示例:

cp -f file.txt /home/user1/

5、交互式复制,询问是否覆盖目标文件:

cp -i source_file destination_directory

示例:

cp -i file.txt /home/user1/

6、显示复制的进度:

cp -v source_file destination_directory

示例:

cp -v file.txt /home/user1/

7、将目录a递归复制到目录m1下

~$ cp -r a m1

查看结果:

~$ ls -R m1

结果输出:

m1:
a

m1/a:
b

m1/a/b:
c

m1/a/b/c:

8、复制文件并保留文件原来的信息,例如时间信息,文件所属信息,创建人等
先查看文件信息:

~$ ls -l
total 0
drwxr-xr-x 1 study study 512 Jun 22 22:08 a
-rw-r--r-- 1 study study   0 Jun 22 22:15 file1
drwxr-xr-x 1 study study 512 Jun 22 22:15 m1
drwxr-xr-x 1 study study 512 Jun 22 21:17 m2
drwxr-xr-x 1 study study 512 Jun 22 21:18 m3

~$ ls -l m1
total 0
drwxr-xr-x 1 study study 512 Jun 22 22:13 a
-rw-r--r-- 1 study study   0 Jun 22 22:16 file1

我们观察file1文件的创建时间,在study目录下是22:15创建的,在m1目录是22:16创建的,22:16是我们复制的时间。
我们要保留文件原来的信息使用-p或-a参数,输入命令并查看结果:

study@DESKTOP:~$ cp -p file1 m2
study@DESKTOP:~$ ls -l m2
total 0
-rw-r--r-- 1 study study 0 Jun 22 22:15 file1

9、通配符操作文件或目录
通配符*和?
*代表所有文件或目录,或代表任意多个字符用来匹配文件或目录名称
?代表一个字符用来匹配文件或目录名称

study@DESKTOP:~$ ls
a  m1  m3
study@DESKTOP:~$ cp -r m* a/
study@DESKTOP:~$ ls
a  m1  m3
~$ ls a
b  m1  m3

这些是cp命令的一些常见选项和示例。更多选项和用法可以通过man cp命令查看。

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

       Mandatory arguments to long options are mandatory for short options too.

       -a, --archive
              same as -dR --preserve=all

       --attributes-only
              don't copy the file data, just the attributes

       --backup[=CONTROL]
              make a backup of each existing destination file

       -b     like --backup but does not accept an argument

       --copy-contents
              copy contents of special files when recursive