Shell - cp

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值