cp命令-复制文件或目录

376 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情

一、命令详解

1.1【功能说明】

cp命令是copy的缩写,其功能为复制文件或目录。

1.2 【语法格式】

[root@7bfe451a2fe1:~]#cp --help
Usage: cp [OPTION]... [-T] SOURCE DEST
  or:  cp [OPTION]... SOURCE... DIRECTORY
  or:  cp [OPTION]... -t DIRECTORY SOURCE...
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

1.3【选项说明】

  • -p 复制文件时保持源文件的所有者、权限信息及时间属性
  • -d 如果复制的源文件是符号链接,那么仅复制符号链接本身,而且保留符号链接所指向的目标文件或目录
  • -r 递归复制目录,即复制目录下的怕有层级的子目录及文件
  • -a 等同于上p/d/r这3个选项功能的总和
  • -i 覆盖已有文件前提示用户确认
  • -t 默认情况下命令格式是 cp 源文件 目标文件,使用-t参数可以颠倒顺序,格式变为cp -t 目标文件 源文件

二、使用范例

2.1 验证-a选项具有-p选项的功能

[root@7bfe451a2fe1:~]#ll
total 4
-rw------- 1 root root 3345 Nov 13  2020 file1.txt
[root@7bfe451a2fe1:~]#cp file1.txt file2.txt
[root@7bfe451a2fe1:~]#cp -a file1.txt file3.txt
[root@7bfe451a2fe1:~]#ll
total 12
-rw------- 1 root root 3345 Nov 13  2020 file1.txt
-rw------- 1 root root 3345 Dec  3 14:29 file2.txt
-rw------- 1 root root 3345 Nov 13  2020 file3.txt
[root@7bfe451a2fe1:~]#

2.2 验证-i选项有提示功能

# 会提示用户确认
cp -i file1.txt file2.txt
# 也会提示用户确认,因为默认 alias cp='cp -i'
cp file1.txt file.txt

# 此时可用全路径来验证
# 会提示用户确认
/bin/cp -i file1.txt file2.txt
# 不会提示用户确认,因为没有-i
/bin/cp file1.txt file2.txt

image.png

2.3 复制多层目录结构的目录

cp -r a a1

image.png

三、扩展知识

3.1 cp覆盖文件之前不提示是否覆盖的几种方法

CentOS系统默认为cp命令设置了别名,即增加了-i的参数,但是在Shell脚本中执行cp时,若没有-i参数,则不会访问是否覆盖。这是因为命令行和Shell脚本执行的环境变量不同,不过在脚本中一般使用命令的全路径。那么在命令行中有哪些方法可以跳过使用别名呢

方法一:使用命令全路径

# 查看系统别名和绝对路径
which cp

# 使用全路径
/bin/cp file1.txt file2.txt

方法二:命令行开头使用反斜线

# 使用\来屏蔽系统别名
\cp file1.txt file2.txt

方法三:取消cp的别名,但重启系统失效

unalias cp
cp file1.txt file2.txt

方法四:从配置文件中取消cp的别名,不建议采用

vi ~/.bashrc
# 注释掉这行
#  alias cp='cp -i'

四、总结小记

  • 2022/12/3 在烟台吃合丰烧烤