cp - 拷贝文件和文件夹
cp是copy的缩写。
语法:
cp [OPTION] Source Destination
cp [OPTION] Source Directory
cp [OPTION] Source-1 Source-2 Source-3 Source-n Directory
cp命令的操作模式,这些操作取决于cp命令中传递的参数数量和类型。
第一种,参数是两个文件名,将第一个文件的内容拷贝到第二个文件。
如果第二个文件不存在,则先创建文件,然后再拷贝内容。如果存在则直接覆盖,没有警告。
加-i选项,在覆盖前会询问。关于cp的覆盖机制,后面的操作方式都是一样的。
$ cp Src_file Dest_file
例如:
$ cp -i 1.txt 2.txt
第二种,参数有两个,第一个是文件,第二个是文件夹,则将第一个文件拷贝到第二个文件夹内。
例如:
$ cp 1.txt dir1/
$ cp 1.txt dir2
这里加不加最后的路径分隔符都可以。但第二个文件夹必须要是存在的。
第三种,参数有两个,第一个是文件夹,第二个也是且只能是文件夹。
这种情况下,因为要拷贝的是一个文件夹,所以要加-r / -R选项,这样才能把源文件夹下的所有内容,包括子文件夹都拷贝到目的文件夹。在后面的操作模式下,涉及到文件夹的操作,都需要加上此参数。
而第二个参数表示的文件夹路径,如果已存在,直接将第一个文件夹拷贝到第二个文件夹路径下。
如果第二个文件夹路径不存在,则将先创建,在将第一个文件夹的内容拷贝到第二个文件夹路径下。
这里要注意,如果第二个参数的文件夹路径不存在,拷贝的不是文件夹本身,而是其下的内容。
同时,要创建第二个参数的文件夹时,要保证其父文件夹是存在的。
例如:
$ cp -r dir1 dir2
第四种,超过两个参数时,表示前面参数表示的源文件拷贝到最后一个参数表示的文件夹中。
cp Src_file1 Src_file2 Src_file3 Dest_directory
这里的directory必须是一个已经存在的文件夹,cp命令不会自动创建新文件夹。如果前面的多个item里有文件夹存在,则需要加上-r / -R 选项。
复制时使用通配符 * (wildcard)
星形通配符代表任何东西,即所有文件和目录。假设我们在一个目录中有许多文本文件,想把它们复制到另一个目录中,如果我们一个一个地复制文件,会花费很多时间,或者如果指定所有这些文件名作为参数,命令会变得太长,但通过使用*通配符,就变得很简单了。
举例:
Initially Folder1 is empty
$ ls
a.txt b.txt c.txt d.txt e.txt Folder1
$ cp *.txt Folder1
$ ls Folder1
a.txt b.txt c.txt d.txt e.txt
常用的选项
Option:-i
Long option:--interactive
说明:
在覆盖一个现有文件之前,提示用户确认。如果没有指定这个选项,cp将默默地(意味着没有警告)覆盖文件。
提示出现后,如果按下y,则会覆盖同名文件,否则的话,都是不会拷贝这个文件的。
Option: -b
说明:
使用这个参数后,如果出现同名文件,则会为目的文件创建一个备份文件,在同一个文件夹下,文件名不同。
再将源文件内容拷贝到目的文件。
例如:
$ ls
a.txt b.txt
$ cp -b a.txt b.txt
$ ls
a.txt b.txt b.txt~
Option: -f
Long option: --force
说明:
如果系统无法打开目标文件进行写入操作,因为用户没有该文件的写入权限,那么通过使用cp命令的-f选项,首先删除目标文件,然后将内容从源文件复制到目标文件。
$ ls -l b.txt
-r-xr-xr-x+ 1 User User 3 Nov 24 08:45 b.txt
User, group and others doesn't have writing permission.
Without -f option, command not executed
$ cp a.txt b.txtcp: cannot create regular file 'b.txt': Permission denied
With -f option, command executed successfully
$ cp -f a.txt b.txt
Option:-r 或 -R
Long option:--recursive
说明:
用来拷贝文件夹结构,递归复制目录和目录里面的内容。拷贝目录时需要这个选项。
Option:-n
Long option:--no-clobber
说明:
对已经存在的文件不进行覆盖,也没有提示,什么都不做。
Option:-u
Long option:--update
说明:
当把文件从一个目录复制到另一个目录时,只复制目标目录中不存在或比现有相应文件新的文件。这在复制大量文件时很有用,因为它跳过了不需要复制的文件。
Option: -p
说明:
Preserve选项。 使用-p选项,cp会在相应的目标文件中保留每个源文件的以下属性:最后一次数据修改的时间和最后一次访问的时间,ownership(需要权限),以及file permission-bits。
注意:为了保留文件属性,你必须是系统的root用户,否则属性会被改变。
举例:
$ ls -l a.txt
-rwxr-xr-x+ 1 User User 3 Nov 24 08:13 a.txt
$ cp -p a.txt c.txt
$ ls -l c.txt
-rwxr-xr-x+ 1 User User 3 Nov 24 08:13 c.txt
正如我们所看到的,a.txt和c.txt(通过复制创建)都有相同的属性。
Option:-v
Long option:--verbose
说明:
执行复制操作过程中显示信息。
应用举例
命令:
$ cp file1 file2
结果:
复制file1到file2。如果file2存在,它将被file1的内容覆盖。如果file2不存在,它将被创建。
命令:
$ cp -i file1 file2
结果:
与上一条命令相同,只是如果file2存在,在覆盖之前会提示用户。
命令:
$ cp file1 file2 dir1
结果:
将file1和file2复制到目录dir1。目录dir1必须已经存在。
命令:
$ cp dir1/* dir2
结果:
使用通配符,将dir1中的所有文件复制到dir2中。 目录dir2必须已经存在。
命令:
$ cp -r dir1 dir2
结果:
将目录dir1的内容复制到目录dir2。如果目录dir2不存在,它将被创建,复制后将包含与目录dir1相同的内容。如果目录dir2确实存在,那么目录dir1(及其内容)将被复制到dir2。
参考:
cp command in Linux with examples - GeeksforGeeks