TranslateProject/published/20230711.1 ⭐️⭐️ Using cp Command in Linux.md
Xingyu Wang 92f38b9767 R
2023-08-12 13:58:37 +08:00

195 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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