cp - 复制文件和目录

cp 用于复制文件,也可以递归复制目录。目标文件已存在时,默认行为可能导致内容被替换,执行前应确认源路径和目标路径。

常用参数

  • -i--interactive:覆盖现有文件前询问。
  • -R--recursive:递归复制目录。
  • -a--archive:归档模式,递归复制并尽量保留链接、权限、所有者和时间戳。
  • -p--preserve:保留指定属性;不写属性列表时保留权限、所有者和时间戳。
  • -v--verbose:显示正在复制的文件。
  • -b--backup:覆盖前备份已有目标。
  • -P--no-dereference:把源符号链接复制为符号链接。
  • -L--dereference:跟随源符号链接,复制其指向的内容。

使用示例

# 复制单个文件
cp source.txt destination.txt
 
# 覆盖前询问
cp -i source.txt destination.txt
 
# 复制多个文件到目录
cp file-1.txt file-2.txt backup/
 
# 递归复制目录
cp -R project backup/
 
# 归档复制并显示过程
cp -av project backup/
 
# 覆盖前创建编号备份(GNU cp)
cp --backup=numbered source.txt destination.txt

文件名以 - 开头时,使用 -- 结束选项解析:

cp -- -source.txt destination.txt

避免误覆盖

  • 不要使用 yes | cp ... 自动确认覆盖,也不要为了绕过别名而盲目使用 \cp -rf
  • -f 主要用于目标无法正常打开时先移除再重建,不是安全确认选项。
  • cp 没有通用的预演模式。批量复制前可先列出源文件,并在临时目录验证路径结构。
  • 使用 -L 递归复制时可能跟随链接离开原目录树,应只在确认链接目标后使用。
  • 跨文件系统复制时,所有者、ACL、扩展属性和稀疏文件等元数据不一定能完整保留。

参考资料