linux cp f命令,linux中 cp 命令详解

cp命令:(copy)命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误

源文件,目标文件

源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;

目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。

单源复制:cp [OPTION]... [-T] SOURCE DEST

多源复制:cp [OPTION]... SOURCE... DIRECTORY:目标必须是目录;

cp [OPTION]... -t DIRECTORY SOURCE...

常用选项:

-i,--interactive:交互式复制,即覆盖目标文件之前提醒用户确认;

-f,force:强制覆盖目标文件;

-R,-r,--recursive:递归复制目录及其内容;

-d:相当于--no-dereference;复制链接本身(默认为复制链接文件的原文件内容);

-P,--no-dereference:复制链接文件本身,而非默认的复制链接文件指向的原文件内容;

--preserve[=ATTR_LIST]: 指明保留的原文件属性列表;

默认为default: mode, ownership, timestamps;

还包括其它属性:context(安全上下文), links(符号链接), xattr(额外属性), all;

-a,--archive:归档复制;备份时才会使用;

相当于-dR --preserve=all;

注意:仅管理员有权限复制时保留属主和属组属性;

单源复制:cp [OPTION]... [-T] SOURCE DEST

如果目标文件文件名与原文件不同名则:复制文件并重命名;

复制过程:先创建目标文件,而后复制源文件的内容导入至目标文件;

如果目标文件事先存在:

如果目标文件文件名与原文件同名则:则覆盖目标文件,root用户默认使用-i选项,为交互确认;

如果目标文件是目录则:在此目录中创建一个与原文件同名的文件,则导入其内容;

当root用户操作cp命令覆盖时不提示确认,直接覆盖,则使用\cp:不使用别名;

而其它用户不需要使用\cp就没有提示;

例如:

~]# cp /etc/grub2.cfg /tmp/:复制文件到指定目录;

~]# cp /etc/grub2.cfg /tmp/mygrub.cfg:复制重命名;

~]# cp /etc/grub2.cfg /tmp/mygrub.cfg:显示复制后重名文件,是否覆盖;

\COMMAND:使用原命令,而不使用命令别名;

~]# \cp /etc/grub2.cfg /tmp/mygrub.cfg:复制后重名文件直接覆盖,不提示;

多源复制:

基本前提:DEST存在,且必须是目录;否则即为错误;即复制时目标目录必须提前创建;

例如:

~]# cp /etc/fstab /etc/grub2.cfg /tmp/mytestdir:目标目录必须存在,否则错误;

~]# cp /etc/grub2.cfg /tmp/mygrub.cfg:复制后并重命名;

~]# \cp -i -f /etc/fstab /tmp/mygrub.cfg:选择-i执行交互式选项;

复制链接文件时要注意:

~]# ll /etc/redhat-release:显示为链接文件,指向同目录下的centos-release;

~]# cp /etc/etc/redhat-release /tmp/:复制链接文件;默认复制链接文件的原文件内容;

~]# /tmp/redhat-release:显示正常的链接文件;可查看链接内容;

~]# cp -P /etc/redhat-release /tmp/my-release:如果仅复制链接文件本身(快捷方式);

~]# ll /tmp/my-release:无法打开链接文件;相当于只复制了快捷方式;

~]# cp /etc/grub2.cfg /tmp/centos-release:只要链接文件同目录下有链接源文件的文件名就能打开链接文件;墙头草,随风倒;

~]# ll /tmp/my-release:再查看,链接文件正常;

复制文件元数据时注意:

~]# ll /etc/grub2.cfg:查看文件的属主、属组;是root;

~]$ cp /etc/grub2.cfg /tmp/mygrub2.cfg:用mageedu用户复制文件;

~]$ ll /tmp/mygrub2.cfg:查看文件的属主、属组;是mageedu;即不复制文件的元数据,只复制文件内容本身;

~]$ cp -p /etc/grub2.cfg /tmp/mygrub2.cfg:复制时保留文件元数据;

~]$ ll /tmp/mygrub2.cfg:查看文件的属主、属组;是root;

实例:

如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点.或点点..的形式。例如,下面的命令将指定文件复制到当前目录下:

cp ../mary/homework/assign .

所有目标文件指定的目录必须是己经存在的,cp命令不能创建目录。如果没有文件复制的权限,则系统会显示出错信息。

将文件file复制到目录/usr/men/tmp下,并改名为file1

cp file /usr/men/tmp/file1

将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中

cp -r /usr/men /usr/zh

交互式地将目录/usr/men中的以m打头的所有.c文件复制到目录/usr/zh中

cp -i /usr/men m*.c /usr/zh

我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法:

cp aaa/* /bbb

复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。

cp -r aaa/* /bbb

这次依然需要按Y来确认操作,但是没有忽略子目录。

cp -r -a aaa/* /bbb

依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。

\cp -r -a aaa/* /bbb

成功,没有提示按Y、传递了目录属性、没有略过目录。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值