每天进步一点点——linux——cp -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【meiwen.anslib.com - 电脑资料】

   

一 简介

    cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一,

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

。一般情况下,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

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

最新文章