Linux 常用命令 - cp 【复制文件和目录】

news2024/9/9 1:05:16

简介

cp 命令来源于英文单词 “copy”,用于复制文件和目录。它是 Linux 系统中最常用的文件管理命令之一,可以将文件或目录从一个位置复制到另一个位置。

使用方式

cp [选项]... 源文件 目标文件
cp [选项]... 源文件... 目标目录

常用选项

  • -a, --archive:实现归档功能,效果等同于 -dR

  • --attributes-only:只复制文件的属性,而不复制文件的数据内容。

  • --backup[=CONTROL]:在复制文件时,为每个已存在的目标文件创建一个备份。防止错误地覆盖了同名目标文件而造成数据丢失。其中 CONTROL 作为一个可选的参数,可以指定备份的方式。详见下文。

  • -b:和 --backup 类似但不接受参数。

  • --copy-contents:在递归地复制特殊文件时,确保复制这些文件的内容而不仅仅是其属性和链接信息。

  • -d:效果同 --no-dereference --preserve=links。确保在复制过程中不改变链接的特性。

  • -f, --force:如果目标位置已存在一个同名文件,且该文件无法被打开,则先删除这个文件并再次尝试复制,可认为是强制覆盖目标文件(如果同时使用了 -n 选项,则 -f 会被忽略)。

  • -i, --interactive:打开交互式提示,如果目标位置已存在同名文件,则会提示用户是否要进行覆盖。

  • -H:如果命令行给出的源路径中存在符号链接,则复制符号链接所指向的文件。

  • -l, --link:创建源文件的硬链接,而非复制文件内容。

  • -L, --dereference:如果源文件是符号链接,则复制符号链接所指向的文件。与 -H 不同的是,-H 仅作用于命令行中指定的符号链接,而 -L 将会解析所有其遇到的符号链接。

  • -n, --no-clobber:不覆盖一个已存在的文件。

  • -P, --no-dereference:复制符号链接本身,而不是其指向的实际文件。

  • -p:效果同 --preserve=mode,ownership,timestamps

  • --preserve[=ATTR_LIST]:复制时保留指定的属性(默认为:mode,ownership,timestamps),可选的其他属性有:context, links, xattr, all

  • --no-preserve=ATTR_LIST:复制时不要保留指定的属性。

  • --parents:复制时保留源文件的完整路径结构。

  • -R, -r, --recursive:复制整个目录,包括其内部的所有子目录和文件。

  • --reflink[=WHEN]:控制复制的 clone/CoW 行为。具体见下文。

  • --remove-destination:如果目标文件已存在,则会删除目标文件,再进行复制。区别于 -f ,该选项会确保先删除后复制,得到的是全新的文件,而 -f 可能只是将源文件的内容覆盖到目标文件,目标文件本身并没有被删除。

  • --sparse=WHEN:控制稀疏文件的创建,详见下文。

  • --strip-trailing-slashes:去除每个源文件名末尾的斜杠(/)。

  • -s, --symbolic-link:创建源文件的符号链接,而不是复制文件内容。

  • -S, --suffix=SUFFIX:创建备份文件时指定一个自定义的后缀。

  • -t, --target-directory=DIRECTORY:该选项允许同时指定多个源文件一次性复制到指定的目录。

  • -T, --no-target-directory:将指定目标视为普通文件,而不考虑其是否为目录。

  • -u, --update:只在源文件较新或目标文件缺失时才执行复制操作。

  • -v, --verbose:在命令执行过程中输出详细的操作信息。

  • -x, --one-file-system:使 cp 在执行时仅限于当前文件系统内,避免跨越到其他文件系统。

  • -Z:设置目标文件的 SELinux 安全上下文为默认类型。

  • --context[=CTX]:将目标文件的 SELinux 或 SMACK 安全上下文设置为指定的 CTX,若未指定,那效果与 -Z 相同。

  • --help:显示帮助信息。

  • --version:显示版本信息。

- - backup[=CONTROL]

默认的备份文件后缀为 ‘~’,也可通过 --suffixSIMPLE_BACKUP_SUFFIX 这个环境变量来修改。

--backup 可以用来控制备份的模式,也可以通过 VERSION_CONTROL 这个环境变量来设定。具体的模式如下:

  • none, off:从不创建备份文件(即使用了 --backup)选项。

  • numbered, t:以编号形式创建备份。

  • existing, nil:如果已存在编号备份,则创建编号备份;如果没有,则创建简单备份(如添加 ~ 后缀)。

  • simple, never:始终创建简单备份,即总是使用 ~ 作为后缀。

- - reflink[=WHEN]

当指定了 --reflink[=always] 时,cp 命令会执行一种轻量级的复制方式。在这种情况下,只有在原始数据块被修改时,才会实际复制这些数据块。如果系统不支持该操作,那复制会失败。

当使用 --reflink=auto 时,系统会尝试进行这种轻量级的复制,如果此时失败,则会回退到普通的复制模式。

使用 --reflink=never 则会确保本次复制是普通模式。

稀疏文件

默认情况下,系统会用一种简单的启发式(crude heuristic)方式来检测源文件是否为稀疏文件。如果源文件被识别为稀疏文件,那么目标文件也会被设置为稀疏文件。这种行为由 --sparse=auto 来控制。

如果指定了 --sparse=always,系统会在源文件包含有足够长的零字节序列时创建稀疏文件。

使用 --sparse=never 将确保目标文件始终是一个常规文件。

参考示例

1. 复制文件到另一个目录

cp test.txt subdir/

上述指令将当前目录下的 test.txt 文件复制到了当前目录的 subdir 目录下:

jay@jaylinuxlenovo:~/test/cmd_test_dir$ cp test.txt subdir/
jay@jaylinuxlenovo:~/test/cmd_test_dir$ ls -R
.:
subdir  test.txt

./subdir:
test.txt

首先执行复制指令,再使用 ls 命令查看当前目录结构发现 test.txt 已被成功复制到了 subdir 目录下。

2. 复制文件并备份已存在的目标文件

cp --backup test.txt subdir/

在示例 1 的基础上,加入 --backup 选项,由于示例 1 中已经复制了一个 test.txtsubdir 中,因此本次复制由于使用了 --backup,系统会自动对原先的 test.txt 创建一个备份:

jay@jaylinuxlenovo:~/test/cmd_test_dir$ cp --backup test.txt subdir/
jay@jaylinuxlenovo:~/test/cmd_test_dir$ ls -lR
.:
total 8
drwxrwxr-x 2 jay jay 4096 Jul 22 14:50 subdir
-rw-rw-r-- 1 jay jay   17 Jul 22 14:37 test.txt

./subdir:
total 8
-rw-rw-r-- 1 jay jay 17 Jul 22 14:50 test.txt
-rw-rw-r-- 1 jay jay 17 Jul 22 14:38 test.txt~

经过复制后可以发现 subdir 中多了一个 test.txt~ 的文件,该文件即系统在复制之前创建的原 test.txt 的备份文件。

3. 复制整个目录

cp -r subdir ./test

复制当前目录下的 subdir 目录及其内部的所有内容到当前目录下的 test 目录中:

jay@jaylinuxlenovo:~/test/cmd_test_dir$ cp -r subdir ./test
jay@jaylinuxlenovo:~/test/cmd_test_dir$ ls -lR test
test:
total 4
drwxrwxr-x 2 jay jay 4096 Jul 22 14:56 subdir

test/subdir:
total 8
-rw-rw-r-- 1 jay jay 17 Jul 22 14:56 test.txt
-rw-rw-r-- 1 jay jay 17 Jul 22 14:56 test.txt~

可见 subdir 及其内容已经全部复制到了 test 目录中。

4. 交互式复制文件

cp -i test.txt ./subdir/

使用 -i 选项可以在目标文件已存在时提示用户是否要覆盖,此时输入 y/n 可以决定是否覆盖:

jay@jaylinuxlenovo:~/test/cmd_test_dir$ cat ./subdir/test.txt
This is test.txt
jay@jaylinuxlenovo:~/test/cmd_test_dir$ cp -i test.txt ./subdir/
cp: overwrite './subdir/test.txt'? y
jay@jaylinuxlenovo:~/test/cmd_test_dir$ cat ./subdir/test.txt
This is a new test.txt 

可以看到在复制之前使用 cat 命令查看 test.txt 内容为 This is test.txt,此时使用 cp -i 指令进行复制,并且在系统进行交互提示后输入 y 确认。最后再次使用 cat 命令查看文件内容已经变成了 This is a new test.txt,表示覆盖成功。

5. 创建文件的硬链接

cp -l test.txt test_hl.txt

使用 -l 选项创建 test.txt 的硬链接,并且将其命名为 test_hl.txt

jay@jaylinuxlenovo:~/test/cmd_test_dir$ cp -l test.txt test_hl.txt
jay@jaylinuxlenovo:~/test/cmd_test_dir$ ls -l
total 16
drwxrwxr-x 2 jay jay 4096 Jul 22 14:50 subdir
drwxrwxr-x 3 jay jay 4096 Jul 22 14:58 test
-rw-rw-r-- 2 jay jay   24 Jul 22 15:02 test_hl.txt
-rw-rw-r-- 2 jay jay   24 Jul 22 15:02 test.txt

6. 创建文件的符号链接

cp -s test.txt test_sl.txt

使用 -s 选项创建 test.txt 的软链接,并将其命名为 test_sl.txt

jay@jaylinuxlenovo:~/test/cmd_test_dir$ cp -s test.txt test_sl.txt
jay@jaylinuxlenovo:~/test/cmd_test_dir$ ls -l
total 16
drwxrwxr-x 2 jay jay 4096 Jul 22 14:50 subdir
drwxrwxr-x 3 jay jay 4096 Jul 22 14:58 test
-rw-rw-r-- 2 jay jay   24 Jul 22 15:02 test_hl.txt
lrwxrwxrwx 1 jay jay    8 Jul 22 15:13 test_sl.txt -> test.txt
-rw-rw-r-- 2 jay jay   24 Jul 22 15:02 test.txt

注意事项

  • 在复制大量文件或大型目录时,注意磁盘空间和权限设置。
    使用 -r 选项时要小心,特别是当目的地是系统目录或其他重要目录时。

  • 在使用 -f 强制覆盖时要小心,以免不小心覆盖重要文件。

  • 创建符号链接(-s)时,源文件的路径应该是绝对路径,以避免链接断裂。

  • 使用 -i 选项可以在覆盖文件前进行确认,减少误操作风险。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1958815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt之详解QPainter

文章目录 前言QPainter 是干什么的如何使用 QPainter在哪个函数使用 QPainter为什么要在这里使用 QPainter最简单的示例代码 QPainter 函数构造函数与析构函数QPainter()QPainter(QPaintDevice *device)~QPainter() 初始化和结束绘图bool begin(QPaintDevice *device)bool end(…

x-cmd pkg | yazi - 超快终端文件管理器

目录 简介快速入门功能特点竞品和相关项目进一步阅读 简介 yazi 是由 github.com/sxyazi 用 Rust 开发的终端文件管理器,支持预览文本文件、pdf 文件、图像、视频,内置代码高亮功能。在内部,它使用 Tokio 作为其异步运行时,以非阻…

【百度超级智能体】零代码构建趣味语言游戏:秋日寻宝知识问答

前言 文心智能体平台AgentBuilder是由百度推出的一个创新平台,该平台基于其先进的文心大模型。这个平台旨在帮助开发者根据各自的专业领域和应用场景,以灵活多样的开发方法构建定制化的智能体(Agent)。通过简单易用的prompt编排功…

详解Qt 定时器QTimer

文章目录 前言QTimer 是什么什么时候使用 QTimer定时器时间到了调用什么函数 QTimer 的所有函数构造函数与析构函数QTimer(QObject *parent nullptr) 基本操作void start(int msec)void start()void stop()bool isActive() const 定时器属性void setInterval(int msec)int int…

瑞芯微平台RK3568系统开发(1)安卓环境搭建

1 开发环境搭建 注意: 重要!重要!重要!自己编译后的固件, 必须先确认io_domains(4.2章节)后,才可以下载到板子运行, 否则可能造成烧坏RK3568的情况。 1.1 更新系统 ~$ sudo apt-get update 1.2 安装依…

MATLAB多元函数梯度下降法找最小值-梯度演示-绘制梯度方向

如果海森矩阵在所有可能的参数值上都是正定的,则该函数是凸的;函数将呈现为光滑的碗状,使得训练过程相对简单。存在单 一的全局最小值,不会有局部最小值或鞍点。 沿着梯度方向,函数变化最快。 x,y点的更新…

LNMP动态网站环境部署

1、LINUX部署 stop firewallddisable selinux 2、Nginx部署 ​ vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.…

Java 多线程编程核心技术权威指南(电子版教程)

前言 Java多线程编程是现代软件开发中不可忽视的关键技术,它能有效利用多核处理器的计算能力,实现并发执行,提升系统性能和响应速度。本篇博客将带您深入了解Java线程的核心概念、高级用法以及并发编程中的常见问题与解决方案。无论您是Java…

前端web开发HTML+CSS3+移动web(0基础,超详细)——第1天

一、开发坏境的准备 1,在微软商店下载并安装VS Code 以及谷歌浏览器或者其他浏览器(我这里使用的是Microsoft Edge) 2,打开vs code ,在电脑桌面新建一个文件夹命名为code,将文件夹拖拽到vs code 中的右边…

《python语言程序设计》2018版第6章第19题几何问题点的位置,利用4.31显示如何测试一个点是在一条有向线的左、右还是刚好在线上

# 这个是4.31的代码,一个函数里包含了。在线上,在线左,在线右 def judgePoint(x0, y0, x1, y1, x2, y2):juMethod ((x1 - x0) * (y2 - y0)) - ((x2 - x0) * (y1 - y0))if juMethod > 0:print("p2 is on the left side of the line f…

MATLAB 共轭梯度法求解线性方程组(附代码)

共轭梯度法求解线性方程组 1. 引言 共轭梯度法(Conjugate Gradient Method)是一种用于求解大型稀疏对称正定线性方程组的迭代算法。该方法结合了梯度下降法和共轭方向的概念,以达到更快速的收敛。共轭梯度法 是介于最速下降法与牛顿法之间的…

Android 11(R) IPC Binder机制 初版

Android 系统分为三层。最上层是application应用层,第二层是framework层,第三层是native层 1.Android 中的应用层和系统服务层不在同一个进程,系统服务在单独的进程中。每个应用的进程都是zygote fork出来的。 2.Android中不同应用属于不同…

数据驱动未来:构建下一代湖仓一体电商数据分析平台,引领实时商业智能革命

1.1 项目背景 本项目是一个创新的湖仓一体实时电商数据分析平台,旨在为电商平台提供深度的数据洞察和业务分析。技术层面,项目涵盖了从基础架构搭建到大数据技术组件的集成,采用了湖仓一体的设计理念,实现了数据仓库与数据湖的有…

《程序猿入职必会(4) · Vue 完成 CURD 案例 》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

【优选算法】——leetcode——438.找到字符串中所有字母异位词

目录 1.题目 2.题目理解 3.算法原理 1.如何快速判断两个字符串是否是异位词 2.解决问题 暴力求解——>滑动窗口哈希表 滑动窗口 利用滑动窗口哈希表解决问题 优化:更新结果的判断条件 4.编程代码 C代码 1.频率统计 2. 双指针 C语言代码 1.字符频率…

传统CS网络的新生——基于2G网络的远程灌溉实现

概述:iphone 实现远程电话触发,实现灌溉绿植的一般方法 方法一: 远程电话触发,音频线左右声道会产生一个信号,可以在后端利用SR锁存器暂存信号,后级可以接相应的控制电路实现灌溉。 方法二: 同…

记录阮一峰grid教程笔记

前言 看了阮一峰的grid教程,做一个笔记,主要自己看,有理解错误的地方后续更正,有新的理解后续补充。教程链接如下: CSS Grid 网格布局教程 - 阮一峰的网络日志 grid主要分为容器属性和项目的属性,在行列布…

React 学习——Context机制层级组件通信

核心思路:(适用于所有层级,不仅仅是爷孙 父子) createContext方法创建一个上下文对象在顶层组件 通过Provider组件提供数据在底层组件,通过useContext钩子函数使用数据 import { createContext, useContext } from …

NSSRound#4 Team

[NSSRound#4 SWPU]1zweb 考察&#xff1a;phar的反序列化 1.打开环境&#xff0c;审计代码 1.非预期解 直接用file伪协议读取flag,或直接读取flag file:///flag /flag 2.正常解法 用读取文件读取index.php,upload.php的源码 index.php: <?php class LoveNss{publi…

Java面试八股之Spring DAO的作用

Spring DAO的作用 Spring DAO (Data Access Object) 是 Spring 框架的一个重要组成部分&#xff0c;它提供了一套用于简化数据访问操作的抽象层。Spring DAO 的核心目的是使开发人员能够更容易地处理数据访问相关的异常&#xff0c;并提供一致的异常处理机制&#xff0c;同时简…