在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