cp 复制文件或目录

命令解释

复制(cp)这个命令特别重要,我们会经常进行一些数据的复制,但是这个命令也可以创建连接文件(也就是我们所熟悉的快捷方式)。如果你不是管理员(root)用户,就会牵扯到权限这个部分的困扰,接下来我们进行举例一一说明。

命令说明
[root@localhost ~]# cp [-adfilprsu] 源文件(source) 目标文件(destination)
[root@localhost ~]# cp [options] source1 source2 source3 ... destination
参数:
-a : 相当于 -pdr 的意思,我们下面会说明用法。[【常用】]
-d : 若源文件为连接文件的属性,怎么复制连接文件属性而非文件本身。
-f : 为强制(force)的意思,若目标文件已经存在且无法开启,则删除后再尝试一次。
-i : 如目标文件(destination)已经存在时,在覆盖时会先询问。[【常用】]
-l : 进行硬连接的连接文件创建,而非复制文件本身。
-p : 连同文件的属性一起复制过去,而非使用默认属性。【备份常用】
-r : 递归持续复制,用于目录的复制行为。[【常用】]
-s : 复制成为符号链接文件,即“快捷方式”文件。[【常用】]
-u : 若 destination 比 source 旧才更新 destination。
最后要注意,如果源文件有两个以上,则最后一个的目标文件一定要是“目录”才行!
命令举例
例题一、将123.log文件复制到/test下,并更名为456.log
[root@localhost ceshi]# ll
-rw-r--r-- 1 root root    0 08-02 21:00 123.log
drwxr-xr-x 2 root root 4096 08-02 21:01 test
[root@localhost ceshi]# cp 123.log test/456.log
[root@localhost ceshi]# cp -i 123.log test/456.log
cp:是否覆盖“test/456.log”? n <= 不覆盖,取消操作。 y <= 覆盖。
# 由于test文件夹中已经存在456.log了,加上 -i 参数后,则在覆盖前会询问用户是否确定,就可以按下 n 或 y 来二次确认了!
例题二、查看/tmp目录下,会看到haha.log,将它复制到/home/ceshi下并且查看属性
root@localhost ceshi]# ll /tmp
-rw-rw-r-- 1 wenjie wenjie    0 08-02 21:09 haha.log
[root@localhost ceshi]# cp /tmp/haha.log . <= 想要复制到当前目录,最后的“.”不能忘
[root@localhost ceshi]# ll /tmp/haha.log haha.log
-rw-r--r-- 1 root   root   0 08-02 21:11 haha.log
-rw-rw-r-- 1 wenjie wenjie 0 08-02 21:09 /tmp/haha.log
# 在不加任何参数的情况下,文件的某些属性/权限会改变,连创建时间也不一样了。

[root@localhost ceshi]# cp -a /tmp/haha.log haha2.log
[root@localhost ceshi]# ll /tmp/haha.log haha2.log
-rw-rw-r-- 1 wenjie wenjie 0 08-02 21:09 haha2.log
-rw-rw-r-- 1 wenjie wenjie 0 08-02 21:09 /tmp/haha.log
# 两个文件属性一模一样,这就是 -a 的特性。
例题三、复制/tmp目录到/home/ceshi目录下面去
[root@localhost ceshi]# cp /tmp .
cp: 略过目录 “/tmp” <= 不能直接复制目录,需要加上 -r 的参数。
[root@localhost ceshi]# cp -r /tmp .
# -r 虽然是用来复制目录的,但是复制过来,文件与目录的权限可能会被改变
# 所以,也可以利用“cp - a /tmp .”来执行命令。
例题四、将例题一复制的 456.log 创建一个连接文件
[root@localhost ceshi]# cp -l test/456.log aaa.log
[root@localhost ceshi]# cp -s test/456.log bbb.log
[root@localhost ceshi]# ll
-rw-r--r-- 2 root root   47 08-02 23:05 aaa.log
lrwxrwxrwx 1 root root   12 08-02 23:08 bbb.log -> test/456.log
drwxr-xr-x 2 root root 4096 08-02 23:05 test

使用-l创建的aaa.log就是一个硬连接文件,而使用-s创建的bbb.log就是一个软连接文件,也就是说,bbb.log就是相当于咱们熟悉的“快捷方式”。

例题五、将例题四生成的bbb.log连接文件复制
[root@localhost ceshi]# cp bbb.log ccc.log
[root@localhost ceshi]# cp -d bbb.log ddd.log
[root@localhost ceshi]# ll bbb.log ccc.log ddd.log test/456.log 
lrwxrwxrwx 1 root root 12 08-02 23:08 bbb.log -> test/456.log
-rw-r--r-- 1 root root 75 08-02 23:15 ccc.log
lrwxrwxrwx 1 root root 12 08-02 23:16 ddd.log -> test/456.log
-rw-r--r-- 2 root root 75 08-02 23:09 test/456.log
# 能看出来,ccc.log与源文件一模一样,这里很有意思,咱们复制的是连接文件,结果却将原文件复制过来了
# 也就是说,如果没有加任何参数时,cp复制的是源文件,而非连接文件本身。
# 若要复制连接文件的属性,就得使用 -d 的参数了!
例题六、将1、2、3文件复制到test文件夹下
[root@localhost ceshi]# ll
-rw-r--r-- 1 root root    0 08-02 23:23 1
-rw-r--r-- 1 root root    0 08-02 23:23 2
-rw-r--r-- 1 root root    0 08-02 23:23 3
drwxr-xr-x 2 root root 4096 08-02 23:23 test
[root@localhost ceshi]# cp 1 2 3 test
[root@localhost ceshi]# ll test
-rw-r--r-- 1 root root 0 08-02 23:25 1
-rw-r--r-- 1 root root 0 08-02 23:25 2
-rw-r--r-- 1 root root 0 08-02 23:25 3
# 可以将多个文件复制到同一个目录中,但是最后一定要是目录
### 使用 `cp` 命令复制文件目录 #### 复制单个文件 使用 `cp` 命令可以轻松地将一个文件从源位置复制到目标位置。基本语法如下: ```bash cp [选项] 源文件 目标文件 ``` 例如,将文件 `file1.txt` 从当前目录复制到 `/backup/` 目录下[^1]: ```bash cp file1.txt /backup/ ``` 如果希望在复制过程中保留原始文件的时间戳和其他属性,可以使用 `-p` 参数[^4]: ```bash cp -p file1.txt /backup/ ``` #### 复制多个文件 当需要一次性复制多个文件时,可以通过指定多个源文件并将它们复制到同一个目标目录中。 ```bash cp [选项] 源文件1 源文件2 ... 目标目录 ``` 例如,将 `file1.txt` 和 `file2.txt` 同时复制到 `/backup/` 目录下: ```bash cp file1.txt file2.txt /backup/ ``` 为了防止误操作覆盖已有文件,建议加上 `-i` 参数以启用交互模式[^3]: ```bash cp -i file1.txt file2.txt /backup/ ``` 此时,如果目标目录中有同名文件,系统会提示确认是否覆盖。 #### 复制整个目录及其内容 对于目录复制,必须显式使用 `-r` `-R` 参数来递归处理子目录中的所有文件和子目录[^4]。 ```bash cp -r 源目录 目标目录 ``` 例如,将目录 `mydir` 及其内部的所有内容复制到 `/backup/` 下: ```bash cp -r mydir /backup/ ``` 同样,也可以结合其他参数实现更多功能。比如,使用 `-a` 参数完全保留原目录结构以及权限、时间戳等元数据: ```bash cp -a mydir /backup/ ``` #### 实际应用示例 以下是几个常见的实际应用场景: 1. **带备份机制的复制** 如果担心意外覆盖重要文件,可利用 `-b` 参数自动创建副本: ```bash cp -b important_file.txt backup_directory/ ``` 2. **仅创建符号链接而非真实复制** 当只需要快速生成指向原文件快捷方式时,可以选择 `-s` 参数[^4]: ```bash cp -s original_file symbolic_link_location/ ``` 3. **强制覆盖现有文件而不提示** 若确定无需任何提醒即可直接替换旧版本文档,则添加 `-f` 标志: ```bash cp -f updated_config.conf /etc/config.conf ``` 以上就是关于 Linux 中 `cp` 命令的一些基础介绍与高级技巧展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值