Linux中的拷贝命令cp


命令用途

cp命令用于复制文件或目录

1. 如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。

2. 若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息

命令举例

#帮助命令

bixiaopeng@bixiaopeng-To-be-filled-by-O-E-M:~$ cp --h
用法:cp [选项]... [-T] 源文件 目标文件
 或:cp [选项]... 源文件... 目录
 或:cp [选项]... -t 目录 源文件...
将源文件复制至目标文件,或将多个源文件复制至目标目录。
长选项必须使用的参数对于短选项时也是必需使用的。
-a, --archive 等于-dR --preserve=all
--attributes-only 仅复制属性而不复制数据 --backup[=CONTROL 为每个已存在的目标文件创建备份
-b 类似--backup 但不接受参数
--copy-contents 在递归处理是复制特殊文件内容
-d 等于--no-dereference --preserve=links
-f, --force 如果目标文件无法打开则将其移除并重试(当 -n 选项
存在时则不需再选此项)
-i, --interactive 覆盖前询问(使前面的 -n 选项失效)
-H 跟随源文件中的命令行符号链接
-l, --link hard link files instead of copying
-L, --dereference always follow symbolic links in SOURCE
-n, --no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-P, --no-dereference 不跟随源文件中的符号链接
-p 等于--preserve=模式,所有权,时间戳
--preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果
可能保持附加属性:环境、链接、xattr 等
--sno-preserve=属性列表 不保留指定的文件属性
--parents 复制前在目标目录创建来源文件路径中的所有目录
-R, -r, --recursive 递归复制目录及其子目录内的所有内容
--reflink[=WHEN] 控制克隆/CoW 副本。请查看下面的内如。
--remove-destination 尝试打开目标文件前先删除已存在的目的地
文件 (相对于 --force 选项)
--sparse=WHEN 控制创建稀疏文件的方式
--strip-trailing-slashes 删除参数中所有源文件/目录末端的斜杠
-s, --symbolic-link 只创建符号链接而不复制文件
-S, --suffix=后缀 自行指定备份文件的后缀
-t, --target-directory=目录 将所有参数指定的源文件/目录
复制至目标目录
-T, --no-target-directory 将目标目录视作普通文件
-u, --update 只在源文件比目标文件新,或目标文件
不存在时才进行复制
-v, --verbose 显示详细的进行步骤
-x, --one-file-system 不跨越文件系统进行操作
--help 显示此帮助信息并退出
--version 显示版本信息并退出
默认情况下,源文件的稀疏性仅仅通过简单的方法判断,对应的目标文件目标文件也
被为稀疏。这是因为默认情况下使用了--sparse=auto 参数。如果明确使用
--sparse=always 参数则不论源文件是否包含足够长的0 序列也将目标文件创文
建为稀疏件。
使用--sparse=never 参数禁止创建稀疏文件。
当指定了--reflink[=always] 参数时执行轻量化的复制,即只在数据块被修改的
情况下才复制。如果复制失败或者同时指定了--reflink=auto,则返回标准复制模式。
The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable. Here are the values:
none, off 不进行备份(即使使用了--backup 选项)
numbered, t 备份文件加上数字进行排序
existing, nil 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never 永远使用普通方式备份
有一个特别情况:如果同时指定--force 和--backup 选项,而源文件和目标文件
是同一个已存在的一般文件的话,cp 会将源文件备份。

#环境准备

bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ mkdir dir1
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ mkdir dir2
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ touch dir1/f1.txt
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ touch dir2/f2.txt
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ cd dir1
bixiaopeng@bixiaopengtekiMacBook-Pro dir1$ ls -al
total 0
drwxr-xr-x  3 bixiaopeng  staff  102  9 18 16:15 .
drwxr-xr-x  4 bixiaopeng  staff  136  9 18 16:14 ..
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:15 f1.txt

#拷贝两个文件

# 拷贝f1.txt为cpf1.txt
bixiaopeng@bixiaopengtekiMacBook-Pro dir1$ cp f1.txt cpf1.txt
bixiaopeng@bixiaopengtekiMacBook-Pro dir1$ ls -al
total 0
drwxr-xr-x  4 bixiaopeng  staff  136  9 18 16:23 .
drwxr-xr-x  4 bixiaopeng  staff  136  9 18 16:14 ..
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:23 cpf1.txt
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:15 f1.txt

#采用交互方式拷贝文件

#采用交互方式将文件f1.txt拷贝为cpf12.txt
#1. 如果cpf12.txt不存在,则直接复制成功
bixiaopeng@bixiaopengtekiMacBook-Pro dir1$ cp -i f1.txt cpf12.txt
#2. 如果cpf12.txt已存在,则会出现提示是否覆盖原来的,y就会覆盖
bixiaopeng@bixiaopengtekiMacBook-Pro dir1$ cp -i f1.txt cpf12.txt
overwrite cpf12.txt? (y/n [n]) y
#3. 如果cpf12.txt已存在,则会出现提示是否覆盖原来的,n就不会覆盖
bixiaopeng@bixiaopengtekiMacBook-Pro dir1$ cp -i f1.txt cpf12.txt
overwrite cpf12.txt? (y/n [n]) n
not overwritten
bixiaopeng@bixiaopengtekiMacBook-Pro dir1$ ls -al
total 0
drwxr-xr-x  5 bixiaopeng  staff  170  9 18 16:40 .
drwxr-xr-x  4 bixiaopeng  staff  136  9 18 16:14 ..
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:23 cpf1.txt
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:40 cpf12.txt
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:15 f1.txt

#强制覆盖

#如果cpf12.txt已经存在,也可以使用强制覆盖
bixiaopeng@bixiaopengtekiMacBook-Pro dir1$ cp -f f1.txt cpf12.txt

#拷贝目录

#将目录dir1复制成dir11
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ cp -R dir1 dir11
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ ls -al dir11
total 0
drwxr-xr-x  5 bixiaopeng  staff  170  9 18 16:50 .
drwxr-xr-x  5 bixiaopeng  staff  170  9 18 16:50 ..
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:50 cpf1.txt
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:50 cpf12.txt
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:50 f1.txt

#同时拷贝文件和目录

#新建一个目录dir3
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ mkdir dir3
#将某些文件和目录复制到dir3目录下
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ cp -R dir11/cpf1.txt dir11/cpf12.txt dir1 dir3
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ ls -al dir3
total 0
drwxr-xr-x  5 bixiaopeng  staff  170  9 18 16:53 .
drwxr-xr-x  6 bixiaopeng  staff  204  9 18 16:52 ..
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:53 cpf1.txt
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:53 cpf12.txt
drwxr-xr-x  5 bixiaopeng  staff  170  9 18 16:53 dir1

#拷贝的文件保留属性

# -p 或 --preserve    保留源文件或目录的属性,包括所有者、所属组、权限与时间
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ cp -p dir2/f2.txt f2.txt
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ ls -al
total 0
drwxr-xr-x  7 bixiaopeng  staff  238  9 18 16:58 .
drwxr-xr-x@ 7 bixiaopeng  staff  238  9 18 15:43 ..
drwxr-xr-x  5 bixiaopeng  staff  170  9 18 16:40 dir1
drwxr-xr-x  5 bixiaopeng  staff  170  9 18 16:50 dir11
drwxr-xr-x  3 bixiaopeng  staff  102  9 18 16:15 dir2
drwxr-xr-x  5 bixiaopeng  staff  170  9 18 16:53 dir3
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:15 f2.txt

# -P 或 --parents     保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经存在
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ cp -P dir2/f2.txt f3.txt 

# -b备份,MAC上不支持该命令,linux系统上可以用

#目录合并及文件覆盖

#查看目录dir1
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ ls -al dir1
total 0
drwxr-xr-x  7 bixiaopeng  staff  238  9 18 17:27 .
drwxr-xr-x  8 bixiaopeng  staff  272  9 18 17:00 ..
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:23 cpf1.txt
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:48 cpf12.txt
drwxr-xr-x  2 bixiaopeng  staff   68  9 18 17:27 ddddir
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:15 f1.txt
-rw-r--r--  1 bixiaopeng  staff    0  9 18 17:27 f2.txt
#查看目录dir2
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ ls -al dir2
total 0
drwxr-xr-x  4 bixiaopeng  staff  136  9 18 17:29 .
drwxr-xr-x  8 bixiaopeng  staff  272  9 18 17:00 ..
-rw-r--r--  1 bixiaopeng  staff    0  9 18 17:28 f1.txt
-rw-r--r--  1 bixiaopeng  staff    0  9 18 17:28 f2.txt
# 合并两个目录
# -f 强制覆盖  -r 拷贝目录和文件  -v 显示过程  -p 保留原有属性
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ cp -frvp dir1/* dir2
dir1/cpf1.txt -> dir2/cpf1.txt
dir1/cpf12.txt -> dir2/cpf12.txt
dir1/ddddir -> dir2/ddddir
dir1/f1.txt -> dir2/f1.txt
dir1/f2.txt -> dir2/f2.txt
#再查看dir2全部都复制过来啦
bixiaopeng@bixiaopengtekiMacBook-Pro testshell$ ls -al dir2
total 0
drwxr-xr-x  7 bixiaopeng  staff  238  9 18 17:31 .
drwxr-xr-x  8 bixiaopeng  staff  272  9 18 17:00 ..
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:23 cpf1.txt
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:48 cpf12.txt
drwxr-xr-x  2 bixiaopeng  staff   68  9 18 17:27 ddddir
-rw-r--r--  1 bixiaopeng  staff    0  9 18 16:15 f1.txt
-rw-r--r--  1 bixiaopeng  staff    0  9 18 17:27 f2.txt
(0)

相关推荐

  • shell之文件路径截取

    最近写脚本,需要对脚本中函数传递的路径参数进行截取,发现了以下比较好用的方法,记录下: file=/dir1/dir2/dir3/my.file.txt 我们可以用${ }分别替换获得不同的值: ${ ...

  • Linux基本命令108将

    Linux基本命令108将

  • Linux中的split命令,文件切割

    Linux中的文件,特别是日志文件,特别大了不好打开,可以用split命令来切割成小文件 split命令有两种方式: 1,指定行数来切割 split -l 300 log.txt newfile 每个 ...

  • linux中删除文件命令是什么

    在Linux系统中我们可以通过rm-rf命令来删除文件,-r表示的是向下递归不管有多少级一并删除,-f表示直接强行删除并且不作任何提示. 在linux系统中删除目录很简单,我们可以使用rmdir命令来 ...

  • Linux中的ls命令详细使用教程

    英文全名:List即列表的意思,当我们学习某种东西的时候要做到知其所以然,当你知道了这个东西大概是个什么了以后你的思维就会联想到很多的东西学习的就会很快.接下来是小编为大家收集的Linux中的ls命令 ...

  • linux中其他搜索命令(locate/which/whereis/grep)

    目录 locate which whereis grep locate 解释 命令名称:locate命令所在路径:/usr/bin/locate执行权限:所有用户功能描述:在文件资料库中查找文件 语法 ...

  • Linux中的Grep命令(在文件中查找文本)

    [日期:2020-05-14]来源:Linux公社  作者:醉落红尘[字体:大 中 小]grep命令是(global regular expression print,全局正则表达式输出)的缩写,它是 ...

  • 运维工作中,Linux用户信息查询命令有哪些

    Linux运维工作中常用的Linux命令很多,用户信息查询命令有哪些?互联网时代发展迅速,Linux运维技术的需求更多推进不少.掌握Linux运维知识是混迹it行业的技能之一.对于运维学习Linux命 ...

  • linux中find命令高级用法

    https://www.cnblogs.com/bianchengzhuji/p/10133821.html 在<Linux中的文件查找技巧>一文中,我们已经知道了文件查找的基本方法,今天 ...

  • Linux 中最常用 150 个命令汇总

    人工智能算法与Python大数据 致力于提供深度学习.机器学习.人工智能干货文章,为AI人员提供学习路线以及前沿资讯 23篇原创内容 公众号 点上方人工智能算法与Python大数据获取更多干货 在右上 ...

  • linux中iptables配置文件及命令详解详解

    https://www.cnblogs.com/itxiongwei/p/5871075.html iptables配置文件 直接改iptables配置就可以了:vim /etc/sysconfig/ ...