每天进步一点点——linux——cp


一 简介

cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。

 

[root@Nagios ~]# alias

alias cp='cp -i'

二 命令格式

cp [选项]... [-T] 源 目的

或:cp [选项]... 源... 目录

或:cp [选项]... -t 目录 源...

三 常用参数

-a, --archive 等于-dR--preserve=all

--backup[=CONTROL 为每个已存在的目标文件创建备份

-i,--interactive 覆盖前询问(使前面的 -n 选项失效)

-l,--link 链接文件而不复制

-L,--dereference 总是跟随符号链接

-n,--no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)

-R,-r, --recursive 递归复制目录及其子目录内的所有内容

 

四 不常用参数

-a, --archive 等于-dR --preserve=all

--backup[=CONTROL 为每个已存在的目标文件创建备份

-b 类似--backup 但不接受参数

--copy-contents 在递归处理是复制特殊文件内容

-d 等于--no-dereference--preserve=links

-f,--force 如果目标文件无法打开则将其移除并重试(当 -n 选项

存在时则不需再选此项)

-i,--interactive 覆盖前询问(使前面的 -n 选项失效)

-H 跟随源文件中的命令行符号链接

-l,--link 链接文件而不复制

-L,--dereference 总是跟随符号链接

-n,--no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)

-P,--no-dereference 不跟随源文件中的符号链接

-p 等于--preserve=模式,所有权,时间戳

--preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果

可能保持附加属性:环境、链接、xattr 等

-c sameas --preserve=context

--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 copy only whenthe SOURCE file is newer

than thedestination file or when the

destination file is missing

-v,--verbose explain what isbeing done

-x,--one-file-system stay on thisfile system

-Z,--context=CONTEXT set securitycontext of copy to CONTEXT

--help 显示此帮助信息并退出

--version 显示版本信息并退出

五 示例

5.1 复制单个文件到目录,文件目标不存在

[bzfys@Nagiost1]$ tree

.

├── t2

├── t3

│?? └── t2

└── t4
[bzfys@Nagios t1]$ cp t4 ./t3/

[bzfys@Nagiost1]$ tree

.

├── t2

├── t3

│?? ├── t2

│?? └── t4

└── t4

5.1 复制单个文件到目录,文件目标存在,加-a与不加-a区别

[root@Nagiost1]# ll

总用量 8

drwxrwxr-x 2 bzfys bzfys 4096 6月 18 09:16 t2

drwxrwxr-x 3 bzfys bzfys 4096 6月 18 09:18 t3

-rw-rw-r-- 1 bzfys bzfys 0 6月 18 09:17 t4

[root@Nagiost1]# cp t4 t3/

cp:是否覆盖"t3/t4"? y

[root@Nagiost1]# ll t3/

总用量 4

drwxrwxr-x 2 bzfys bzfys 4096 6月 18 09:16 t2

-rw-rw-r-- 1 bzfys bzfys 0 6月 18 09:22 t4

[root@Nagiost1]# cp -p t4 t3/

cp:是否覆盖"t3/t4"? y

[root@Nagiost1]# ll t3/

总用量 4

drwxrwxr-x 2 bzfys bzfys 4096 6月 18 09:16 t2

-rw-rw-r-- 1 bzfys bzfys 0 6月 18 09:17 t4

不难看出,如果有-p参数拷贝的文件时间戳等属性也不会变

5.2 复制目录

[root@Nagiost1]# cp t3 t5

cp: 略过目录"t3"

[root@Nagiost1]# cp -a t3 t5

[root@Nagiost1]# tree

.

├── t2

├── t3

│?? ├── t2

│?? └── t4

├── t4

└── t5

├── t2

└── t4

 

5 directories, 3 files

可以看出如果要复制目录需要-a或者-r参数(-r参数后面演示)

5.3 复制一个目录到另一个目录

[root@Nagiost1]# cp t3 t6/

cp: 略过目录"t3

[root@Nagiost1]# cp -r t3 t6

[root@Nagiost1]# tree

.

├── t2

├── t3

│?? ├── t2

│?? └── t4

├── t4

├── t5

│?? ├── t2

│?? └── t4

└── t6

└── t3

├── t2

└── t4

 

8 directories, 4 files

[root@Nagiost1]# cp -r t3/ t6/

cp:是否覆盖"t6/t3/t4"? y

[root@Nagiost1]# tree

.

├── t2

├── t3

│?? ├── t2

│?? └── t4

├── t4

├── t5

│?? ├── t2

│?? └── t4

└── t6

└── t3

├── t2

└── t

我们可以看出,加不加/最后的结果是一样的

 

相关内容

    暂无相关文章