2023-08-09 21:28:12 +08:00
|
|
|
|
[#]: subject: "Using cp Command in Linux"
|
|
|
|
|
[#]: via: "https://itsfoss.com/cp-command/"
|
|
|
|
|
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
|
|
|
|
[#]: collector: "lkxed"
|
|
|
|
|
[#]: translator: "onionstalgia"
|
2023-08-12 13:53:32 +08:00
|
|
|
|
[#]: reviewer: "wxy"
|
|
|
|
|
[#]: publisher: "wxy"
|
|
|
|
|
[#]: url: "https://linux.cn/article-16086-1.html"
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
在 Linux 中使用 cp 命令
|
|
|
|
|
======
|
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
![][0]
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
> 熟悉在 Linux 命令行中复制文件和目录的 cp 命令。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
`cp` 命令是 Linux 中一个重要的命令,你可能经常会用到它。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
正如名称所示,`cp` 代表 <ruby>复制<rt>copy</rt></ruby>,它被用于 [在 Linux 命令行中复制文件和目录][1]。
|
|
|
|
|
|
|
|
|
|
这是一个相对简单的命令,只有几个选项,但你仍有必要深入了解它。
|
|
|
|
|
|
|
|
|
|
在展示 `cp` 命令的实际示例之前,我更建议你先熟悉绝对路径和相对路径的概念,将文件从一个位置复制到另一个位置时,你需要用到它们。
|
|
|
|
|
|
|
|
|
|
> [Linux 中的绝对路径和相对路径的不同之处][1a]
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
### 复制单个文件
|
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
`cp` 命令最简单和最常见的用途是复制文件,只需指定源文件和要“粘贴”文件的目标目录即可。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cp 源文件 目标目录
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![将单个文件从源目录复制到目标目录。][2]
|
|
|
|
|
|
|
|
|
|
### 在复制文件的同时重命名它
|
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
你将文件复制到另一个位置时可以同时进行 [重命名][3]。这有点类似于文本编辑器中的“另存为”选项。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
为此,你必须在路径中给出新的文件名。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cp 源文件 目标目录/新文件名
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![在复制文件的同时重命名][4]
|
|
|
|
|
|
|
|
|
|
### 复制多个文件
|
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
你还可以将多个文件复制到另一个位置。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cp 文件1 文件2 文件3 目标目录
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![复制多个文件时,将目标目录放在最后][5]
|
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
在这种情况下,你无法重命名文件。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
你还可以使用通配符扩展,将特定后缀的文件复制到另一个位置:
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cp *.txt 目标目录
|
|
|
|
|
```
|
|
|
|
|
|
2023-08-12 13:58:37 +08:00
|
|
|
|
![使用通配符扩展复制多个文件,比如所有 .txt 后缀的文件][6]
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
2023-08-12 13:58:37 +08:00
|
|
|
|
### 复制文件时避免覆盖现有文件
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
如果你将 `file1.txt` 复制到一个已经存在名为 `file1.txt` 文件的目录中,它会将原有的文件覆盖掉。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
如果你不希望这样,`cp` 命令还提供了几个选项来处理文件覆盖的情况。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
首先是使用选项 `-i` 的交互模式。在交互模式下,它会询问是否确认或放弃覆盖目标文件。
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cp -i 源文件 目标目录
|
|
|
|
|
cp:覆盖 '目标目录/源文件' ?
|
|
|
|
|
```
|
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
按 `Y` 覆盖文件,按 `N` 跳过复制该文件。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
![覆盖,但以交互方式询问(内容将被覆盖)][7]
|
|
|
|
|
|
|
|
|
|
![覆盖,但以交互方式询问(内容不会被覆盖)][8]
|
|
|
|
|
|
|
|
|
|
选项 `-n` 代表完全取消覆盖。使用此选项时目标文件不会被覆盖。
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cp -n 源文件 目标目录
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![取消覆盖(目录内文件的内容未更改)][9]
|
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
还有一个选项 `-b`,在目标目录的文件将被覆盖时自动为其创建备份。我猜这里 `b` 代表 <ruby>备份<rt>backup</rt></ruby>。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cp -b 源文件 目标目录
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![覆盖文件,但在备份文件后附加了“~”。][10]
|
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
最后,还有一个“<ruby>更新<rt>update</rt></ruby>”选项 `-u`,如果目标文件比源文件旧,或者目标文件不存在,就会被覆盖掉。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cp -u 源文件 目标目录
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![新文件会覆盖旧文件][11]
|
|
|
|
|
|
|
|
|
|
### 复制目录(文件夹)
|
|
|
|
|
|
|
|
|
|
cp 命令也用来[在 Linux 命令行中复制目录][12]。
|
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
在复制目录时,你需要使用递归选项 `-r`。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cp -r 源目录 目标目录
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![在 Linux 中使用 cp 命令复制整个目录][13]
|
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
你还可以将多个目录复制到另一个位置:
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cp -r 目录1 目录2 目录3 目标目录
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![使用 cp 命令复制多个目录][14]
|
|
|
|
|
|
|
|
|
|
### 在复制时保留属性
|
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
当你将文件复制到另一个位置时,它的 [时间戳][15]、[文件权限][16] 甚至所有权都会发生变化。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
这是正常的行为。但在某些情况下,你可能希望在复制文件时保留其原始属性。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
要保留属性,请使用选项 `-p`:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cp -p 源文件 目标目录
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![][17]
|
|
|
|
|
|
|
|
|
|
> 💡 还有一个 `-a` 选项用于存档模式。它将连 ACL 也保留下来。
|
|
|
|
|
|
|
|
|
|
### 🏋️ 练习时间
|
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
想要练习一下 `cp` 命令吗?以下是一些简单的练习题供你尝试。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
- 打开终端并创建一个名为 `practice_cp` 的目录。
|
2023-08-12 13:53:32 +08:00
|
|
|
|
- 现在,将 `/etc/services` 文件复制到这个新创建的目录中。
|
|
|
|
|
- 在 `practice` 目录中对复制的 `services` 文件进行一些小的更改。
|
|
|
|
|
- 现在,使用更新模式再次复制 `/etc/services` 文件。有什么变化吗?观察一下。
|
|
|
|
|
- 查看 `/var/log` 目录,并将以 `mail` 开头的日志文件复制到你的联系目录下。
|
|
|
|
|
- 现在,返回到你的家目录,并创建一个名为 `new_dir` 的新目录(好吧,我想不出更好的名字)。
|
|
|
|
|
- 将 `practice_cp` 目录复制到 `new_dir` 目录中。
|
|
|
|
|
|
|
|
|
|
对你来说这些练习足够用了。希望你能喜欢在这里学习 Linux 命令。
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
2023-08-12 13:53:32 +08:00
|
|
|
|
*(题图:MJ/07b35a39-826e-4904-9f85-25257831ce9d)*
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
via: https://itsfoss.com/cp-command/
|
|
|
|
|
|
|
|
|
|
作者:[Abhishek Prakash][a]
|
|
|
|
|
选题:[lkxed][b]
|
|
|
|
|
译者:[onionstalgia](https://github.com/onionstalgia)
|
2023-08-12 13:53:32 +08:00
|
|
|
|
校对:[wxy](https://github.com/wxy)
|
2023-08-09 21:28:12 +08:00
|
|
|
|
|
|
|
|
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
|
|
|
|
|
|
|
|
|
[a]: https://itsfoss.com/author/abhishek/
|
|
|
|
|
[b]: https://github.com/lkxed/
|
|
|
|
|
[1]: https://itsfoss.com/copy-files-directory-linux/
|
2023-08-12 13:53:32 +08:00
|
|
|
|
[1a]: https://linuxhandbook.com/absolute-vs-relative-path/
|
2023-08-09 21:28:12 +08:00
|
|
|
|
[2]: https://itsfoss.com/content/images/2023/07/cp_2.png
|
|
|
|
|
[3]: https://learnubuntu.com:443/rename-files/
|
|
|
|
|
[4]: https://itsfoss.com/content/images/2023/07/cp_rename.png
|
|
|
|
|
[5]: https://itsfoss.com/content/images/2023/07/cp_multiple_files-1.png
|
|
|
|
|
[6]: https://itsfoss.com/content/images/2023/07/cp_multiple_files-wildcard_expansion-.png
|
|
|
|
|
[7]: https://itsfoss.com/content/images/2023/07/cp_overwrite--i-.png
|
|
|
|
|
[8]: https://itsfoss.com/content/images/2023/07/cp_overwrite--i-_unchanged.png
|
|
|
|
|
[9]: https://itsfoss.com/content/images/2023/07/cp_overwrite_-n.png
|
|
|
|
|
[10]: https://itsfoss.com/content/images/2023/07/cp_overwrite_-b-1.png
|
|
|
|
|
[11]: https://itsfoss.com/content/images/2023/07/cp_overwrite--u--1.png
|
|
|
|
|
[12]: https://linuxhandbook.com:443/copy-directory-linux/
|
|
|
|
|
[13]: https://itsfoss.com/content/images/2023/07/cp_directories_1-1.png
|
|
|
|
|
[14]: https://itsfoss.com/content/images/2023/07/cp_directories_2-1.png
|
|
|
|
|
[15]: https://linuxhandbook.com:443/file-timestamps/
|
|
|
|
|
[16]: https://linuxhandbook.com:443/linux-file-permissions/
|
|
|
|
|
[17]: https://itsfoss.com/content/images/2023/07/cp_preserve_attributes.png
|
2023-08-12 13:53:32 +08:00
|
|
|
|
[0]: https://img.linux.net.cn/data/attachment/album/202308/12/135152eqsy2yiczqiicqvt.jpg
|