CP
Linux文件复制命令
cp指令是用于Linux中文件复制的命令,后面可接选项和参数,形如:command [options] [arguments] ,其中options 用于控制命令的行为,arguments表示命令的参数。cp命令可以将多个源路径的文件复制到一个目标路径中,多个源路径使用空格隔开,目标路径放在最后。
用法
cp [options] 源文件 目标文件
cp [options] 源文件1 源文件2 源文件3 …… 目标目录
cp [options] 源目录1 源目录2 源目录3 …… 目标目录
选项说明
-a,--archive:相当于 -dR -preserve=all
--attributes-only:仅仅复制属性而不复制文件的数据部分
--backup[=control]:
none, off :不进行备份(即使使用了 --backup 选项)
numbered, t :使用带有数字编号的备份文件进行备份
existing, nil : 若带数字的备份文件已经存在则使用 numbered,否则使用 simple
simple, never : 总是使用简单方式进行备份
-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=mode,ownership,timestamps
--preserve[=属性列表]:如果可能的话,保留指定的属性(默认:mode,ownership,timestamps)其他属性:context、links、xattr、all
--no-preserve=属性列表:不保留指定的属性
--parents:在 <目录> 下使用完整的源文件路径
-R, -r, --recursive:递归地复制目录
--reflink[=when]:控制克隆/CoW 副本。当指定了 --reflink[=always] 参数时,将进行轻量级复制,此时数据块只在被修改时进行复制。如果因无法进行这种复制而导致复制失败,或者指定了 --reflink=auto,程序将会回退到标准复制操作。使用 --reflink=never 可以确保永远进行标准复制。
--remove-destination:尝试打开目标文件前先删除已存在的目标文件(和 --force 选项有区别)
--sparse=when:控制创建稀疏文件的方式。默认情况下,将通过简单的启发式算法检测稀疏的<源> 文件,并将对应的 <目标>文件设为稀疏。这也是 --sparse=auto 的行为。若使用 --sparse=always,则只要<源> 文件包含了足够长的零字节序列,都会将 <目标> 文件创建为稀疏文件。使用 --sparse=never 可以禁止创建稀疏文件。
--strip-trailing-slashes:删除参数中所有 <源> 末尾的斜杠
-s, --symbolic-link:只创建符号链接而不复制文件
-S, --suffix=后缀:自行指定备份文件的后缀(与—backup命令有关)
-t, --target-directory=目录:将所有 <源> 参数复制到 <目录>
-T, --no-target-directory:将 <目标> 视为普通文件
-u, --update:只在 <源> 比目标文件新,或目标文件不存在时才进行复制
-v, --verbose:显示详细步骤
-x, --one-file-system:不跨越文件系统进行操作
-Z:设置目标文件的 SELinux 安全上下文为默认类型
--context[=CTX]:类似 -Z,但如果指定了 < CTX >,则将 SELinux或 SMACK 安全上下文设置为 < CTX >
--help:显示此帮助信息并退出
--version:显示版本信息并退出
使用范例
复制一个文件夹的全部信息:cp -a folder1 folder2
仅仅复制文件的属性部分不复制数据部分: cp --attributes-only file1 file2
如果VERSION_CONTROL环境变量的值没有被指定,-b的默认值是‘existing’,也就是相当于—backup=existing。除非设置了—suffix 或者 SIMPLE_BACKUP_SUFFIX,备份文件后缀为‘~’
-b与—backup不同,-b不接受任何参数,也就是说-b=existing是错误的用法
cp -b file1.txt file2.txt
cp –backup=existing file1.txt file2.txt
如果file2.txt已经存在,那么备份文件为file2.txt~
当参数为none 或者off时不进行备份操作,此时目标文件将会被覆写,丢失原来的内容:
cp –backup=none file1.txt file2.txt
cp –backup=off file1.txt file2.txt
当参数指定为numbered 或者 t 时,对备份文件后缀加编号
cp –backup=numbered file1.txt file2.txt
cp –backup=t file1.txt file2.txt
备份文件为file2.txt.~1~,如果后续继续复制到file2.txt则会继续产生备份文件,名如:file2.txt.~2~,file2.txt.~3~,file2.txt.~4~等等。编号备份可以有多个文件,但是普通备份只有一个文件file2.txt~。
当参数指定为existing 或者 nil时,已经进行编号备份的文件进行编号备份,其余的进行普通备份
cp –backup=existing file1.txt file2.txt
cp –backup=nil file1.txt file2.txt
当参数指定为simple 或者never时,总是进行普通备份
注意never 和none 的区别
cp –backup=simple file1.txt file2.txt
cp –backup=never file1.txt file2.txt
将文件file1强制复制成file2,不会询问是否覆盖
当目标文件无法打开或者没有写入权限的时候,复制命令会失败
当-n选项被指定的时候-f会失效
cp -f file1 file2
采用交互方式将文件file1复制成文件file2(如果file2已经存在会询问是否覆盖,输入y表示覆盖,输入n表示不覆盖)
cp -i file1 file2
建立硬链接文件,并没有复制文件,内存空间中仅仅是一份文件内容。硬链接是目标文件的一个直接引用,它与原始文件在文件系统中共享相同的 inode。换句话说,硬链接是目标文件的另一个名称。
硬链接和源文件具有相同的inode,即使原始文件被删除,硬链接仍然存在,直到所有链接都被删除。
cp -l file1 file1_hlink
复制的时候不要覆盖目标文件,会使-f选项失效
cp -n file1 file2
保留文件的附加信息。例如时间戳所有者权限
-p 相当于—preserve=mode,ownership,timestamps
cp -p file1 file2
mode,ownership,timestamps这些文件属性可单独指定保留哪些,通过—preserve=[属性列表]来指定。
cp –preserve=mode file1 file2
cp –preserve=ownership file1 file2
cp –preserve=timestamps file1 file2
将目录dir1复制成目录dir2(复制目录内容时必须加上-R)
注意:用户使用该指令复制目录时,必须使用参数 -r 或者 -R 。
cp -R file1 file2
建立软链接文件(相当于window下的快捷方式,本质不是文件)
软链接是一个指向目标文件或目录的符号链接,实际上是一个特殊类型的文件,其中包含目标文件的路径。软链接类似于 Windows 中的快捷方式。软链接和源文件具有不同的 inode,它们的链接性质是弱的,如果原始文件或目录被删除或移动,软链接将失效。
cp -s file1 file1_slink
复制文件,只有源文件比目标文件的修改时间新或者目标文件不存在时,才复制文件
cp -u file1 file2
同时将文件file1、file2、file3与目录dir1复制到dir2
注意,只有最后一个才是目标路径,前面的都是源路径cp -R file1 file2 file3dir1 dir2
参考资料
最新修订时间:2024-10-11 21:42
目录
概述
用法
选项说明
参考资料