在 Linux 中使用 cp 命令

news/2025/2/10 8:58:35/

cp 命令是 Linux 中一个重要的命令,你可能经常会用到它。

正如名称所示,cp 代表 复制copy,它被用于 在 Linux 命令行中复制文件和目录。

这是一个相对简单的命令,只有几个选项,但你仍有必要深入了解它。

在展示 cp 命令的实际示例之前,我更建议你先熟悉绝对路径和相对路径的概念,将文件从一个位置复制到另一个位置时,你需要用到它们。

Linux 中的绝对路径和相对路径的不同之处

1.复制单个文件

cp 命令最简单和最常见的用途是复制文件,只需指定源文件和要“粘贴”文件的目标目录即可。

cp 源文件 目标目录

将单个文件从源目录复制到目标目录。

(将单个文件从源目录复制到目标目录)

2.在复制文件的同时重命名它

你将文件复制到另一个位置时可以同时进行 重命名。这有点类似于文本编辑器中的“另存为”选项。

为此,你必须在路径中给出新的文件名。

cp 源文件 目标目录/新文件名

在复制文件的同时重命名

(在复制文件的同时重命名)

3.复制多个文件

你还可以将多个文件复制到另一个位置。

cp 文件1 文件2 文件3 目标目录

复制多个文件时,将目标目录放在最后

(复制多个文件时,将目标目录放在最后)

在这种情况下,你无法重命名文件。

你还可以使用通配符扩展,将特定后缀的文件复制到另一个位置:

cp *.txt 目标目录

使用通配符扩展复制多个文件,比如所有 .txt 后缀的文件

使用通配符扩展复制多个文件,比如所有 .txt 后缀的文件

4.复制文件时避免覆盖现有文件

如果你将 file1.txt 复制到一个已经存在名为 file1.txt 文件的目录中,它会将原有的文件覆盖掉。

如果你不希望这样,cp 命令还提供了几个选项来处理文件覆盖的情况。

首先是使用选项 -i 的交互模式。在交互模式下,它会询问是否确认或放弃覆盖目标文件。

cp -i 源文件 目标目录
cp:覆盖 '目标目录/源文件' ?

按 Y 覆盖文件,按 N 跳过复制该文件。

覆盖,但以交互方式询问(内容将被覆盖)

覆盖,但以交互方式询问(内容将被覆盖)

覆盖,但以交互方式询问(内容不会被覆盖)

覆盖,但以交互方式询问(内容不会被覆盖)

选项 -n 代表完全取消覆盖。使用此选项时目标文件不会被覆盖。

cp -n 源文件 目标目录

取消覆盖(目录内文件的内容未更改)

取消覆盖(目录内文件的内容未更改)

还有一个选项 -b,在目标目录的文件将被覆盖时自动为其创建备份。我猜这里 b 代表 备份backup。

cp -b 源文件 目标目录

覆盖文件,但在备份文件后附加了“~”。

覆盖文件,但在备份文件后附加了“~”。

最后,还有一个“更新update”选项 -u,如果目标文件比源文件旧,或者目标文件不存在,就会被覆盖掉。

cp -u 源文件 目标目录

新文件会覆盖旧文件

(新文件会覆盖旧文件)

5.复制目录(文件夹)

cp 命令也用来在 Linux 命令行中复制目录。

在复制目录时,你需要使用递归选项 -r

cp -r 源目录 目标目录

在 Linux 中使用 cp 命令复制整个目录

在 Linux 中使用 cp 命令复制整个目录

你还可以将多个目录复制到另一个位置:

cp -r 目录1 目录2 目录3 目标目录

使用 cp 命令复制多个目录

使用 cp 命令复制多个目录

6.在复制时保留属性

当你将文件复制到另一个位置时,它的 时间戳、文件权限 甚至所有权都会发生变化。

这是正常的行为。但在某些情况下,你可能希望在复制文件时保留其原始属性。

要保留属性,请使用选项 -p

cp -p 源文件 目标目录

💡 还有一个 -a 选项用于存档模式。它将连 ACL 也保留下来。

🏋️ 练习时间

想要练习一下 cp 命令吗?以下是一些简单的练习题供你尝试。

  • 打开终端并创建一个名为 practice_cp 的目录。
  • 现在,将 /etc/services 文件复制到这个新创建的目录中。
  • 在 practice 目录中对复制的 services 文件进行一些小的更改。
  • 现在,使用更新模式再次复制 /etc/services 文件。有什么变化吗?观察一下。
  • 查看 /var/log 目录,并将以 mail 开头的日志文件复制到你的联系目录下。
  • 现在,返回到你的家目录,并创建一个名为 new_dir 的新目录(好吧,我想不出更好的名字)。
  • 将 practice_cp 目录复制到 new_dir 目录中。

对你来说这些练习足够用了。希望你能喜欢在这里学习 Linux 命令。


http://www.ppmy.cn/news/1034335.html

相关文章

log4j教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;…

【QT】 QFileQFileInfo文件操作

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享QT对文件的操作技术,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进步! 你的点…

cesium 卫星环绕扫描

成果图 源码 let viewer new Cesium.Viewer(cesiumContainer,{// terrainProvider: Cesium.createWorldTerrain(),geocoder: false, // 隐藏查找位置homeButton: false, // 隐藏返回视角到初始位置sceneModePicker: false, // 隐藏视角模式的选择baseLayerPicker: false, // 隐…

opencv基础52-图像轮廓学习05-凸包获取-cv2.convexHull()

逼近多边形是轮廓的高度近似,但是有时候,我们希望使用一个多边形的凸包来简化它。 凸包跟逼近多边形很像,只不过它是物体最外层的“凸”多边形。凸包指的是完全包含原有轮 廓,并且仅由轮廓上的点所构成的多边形。凸包的每一处都是…

2023全网最牛的Python自动化测试

1. 概述 1.1 python自动化 什么是python自动化?我理解的Python自动化测试就是把以前人为测试转化为机器测试的一种过程。自动化测试是一种比手工测试更快获得故障反馈的方法。 自动化测试是一种质量保障的方式,最重要的还是以做好一款高质量产品为前提…

sift-1M数据集的读取及ES插入数据

sift是检查ann近邻召回率的标准数据集,ann可以选择faiss,milvus等库或者方法;sift数据分为query和base,以及label(groundtruth)数据。本文采用sift-1M进行解读,且看如下: 1、sift-1m数据集 官方链接地址:Evaluation of Approximate nearest neighbors: large datase…

【MySQL】MySQL数据库的delete from table和truncate table之间的区别

DELETE FROM table 和 TRUNCATE TABLE 是两种不同的数据库操作,用于从MySQL数据库的表中删除数据。它们有以下区别: 操作方式:DELETE FROM table 是一种逐行删除的操作,它会逐个删除表中的每一行数据,并且可以带有条件…

多IP服务器有什么作用

1.利于搜索引擎收录: 使用多IP应用云服务器可使一个IP对应一个网站,使各个网站之间的独立性更强,这样搜索引擎会评定该网站质量更高, 更容易抓取到该网站的页面,便于搜索引擎收录。 2.提高网站的权重和排名&#xff…