如何使用cp命令复制文件和目录!【Linux命令合集】
Linux命令
只要你使用Linux,你就会一直使用cp命令。用于复制文件和目录。
常用组合键:
# -r:复制整个目录(递归)
# -p:保留原始文件所有者、组、权限和时间戳
cp -rp foldA foldB
今天详细讲解了Linux cp命令的使用方法。
1 cp命令复制文件和目录的基础知识
- 1.1普通复制
1.2按原样复制文件名
1.3复制多个文件
1.4带通配符的复制
2 cp 命令的有用选项
- 2.1 cp命令选项列表
2.2 -r 选项:复制整个目录
2.3 -f选项:强制复制
2.4 -i选项:覆盖时检查
2.5 -b选项(–backup):覆盖时创建备份文件
2.6 -s选项(–symbolic-link):创建符号链接
2.7 -l选项:创建硬链接
2.8 -v选项:显示副本信息
2.9 -P选项(–parents):复制整个目录结构
cp命令是copy的缩写,是按原样复制文件的命令。基本格式如下。
$ cp 复制原文件 复制后文件
例如,它看起来像这样:
$ cp fileA.txt fileA_copy.txt
[wanglian@localhost shell]$ ls
fileA.txt
[wanglian@localhost shell]$ cp fileA.txt fileA_copy.txt
[wanglian@localhost shell]$ ls
fileA.txt fileA_copy.txt
[wanglian@localhost shell]$
复制现已完成。
当然,你也可以将其复制到其他目录。以下示例将复制目标指定为 dir 目录。
$ cp fileA.txt dir/fileA_copy.txt
这只是基础知识,很多人可能都知道如何使用它。
按原样复制文件名
如果要复制同名文件而不更改它,只需在复制目标中写入目录名称即可。
$ cp 复制原文件 复制后路径名
这就是制作副本所需要做的全部工作。它看起来像这样:将 fileA.txt 复制到 dir 目录中。
$ cp fileA.txt dir
[wanglian@localhost shell]$ ls
dir fileA.txt fileA_copy.txt
[wanglian@localhost shell]$ cp fileA.txt dir/
[wanglian@localhost shell]$
[wanglian@localhost shell]$ ls dir/
fileA.txt
[wanglian@localhost shell]$
复制多个文件
很多人可能不知道这一点,但是您也可以同时复制多个文件。将文件保存在与上面同名的目录中。
$ cp 复制原文件1 复制原文件2 复制后路径名
$ cp fileA.txt fileB.txt dir
[wanglian@localhost shell]$ ls
dir fileA.txt fileA_copy.txt fileB.txt
[wanglian@localhost shell]$
[wanglian@localhost shell]$ cp fileA.txt fileB.txt dir
[wanglian@localhost shell]$
[wanglian@localhost shell]$ ls dir/
fileA.txt fileB.txt
[wanglian@localhost shell]$
这样就可以同时复制两个文件了。
使用通配符复制
您还可以使用通配符一次性复制全部内容。它看起来像这样:
$ cp file* 复制后路径名
[wanglian@localhost shell]$ ls
dir fileA.txt fileA_copy.txt fileB.txt
[wanglian@localhost shell]$
[wanglian@localhost shell]$ cp file* dir/
[wanglian@localhost shell]$ ls dir/
fileA.txt fileA_copy.txt fileB.txt
[wanglian@localhost shell]$
这也非常有用。记住这一点并没有什么坏处。
cp 命令的有用选项
cp 命令选项列表
稍后我会介绍一些特别有用的,但首先我们先介绍一个列表。
这些是 cp 命令的选项。我们将只介绍有用的项目。
-r 选项:复制整个目录
cp 命令最常用的选项是“-r”选项。
您可以通过添加 -r 选项来复制整个目录。目录中的文件也会被复制。
$ cp -r 复制原路径 复制后路径
[wanglian@localhost shell]$ ls
dir fileA.txt fileA_copy.txt fileB.txt
[wanglian@localhost shell]$
[wanglian@localhost shell]$ cp -r dir/ dir2/
[wanglian@localhost shell]$
[wanglian@localhost shell]$ ls dir2/
fileA.txt fileA_copy.txt fileB.txt
[wanglian@localhost shell]$
-f 选项:强制复制
虽然根据发行版而有所不同,但可能会要求您确认复制目的地是否存在同名文件。
如果不想一一回答,可以使用“-f”命令。以force的名义强行覆盖。
[wanglian@localhost shell]$ cp -f fileA.txt fileB.txt
[wanglian@localhost shell]$
-i选项:覆盖时检查
与 -f 选项相反,有时您想要检查它是否会被覆盖。处理重要文件时,覆盖可能是致命的。
$ cp -i 复制原文件 复制后文件
将出现“是或否”确认信息。
[wanglian@localhost shell]$ cp -i fileA.txt fileB.txt
cp: 'fileB.txt' を上書きしますか? no
[wanglian@localhost shell]$
这可能是最近发行版中的默认设置。如果没有设置,可以使用别名来设置。
-b选项(–backup):覆盖时创建备份文件
当您处理重要文件时,覆盖它们是很可怕的。在这种情况下可以使用“-b”选项。
如果使用-b选项,则在执行cp命令的同时将创建备份文件。
[wanglian@localhost shell]$ cp -b fileA.txt fileB.txt
[wanglian@localhost shell]$ ls
dir dir2 fileA.txt fileA_copy.txt fileB.txt fileB.txt~
[wanglian@localhost shell]$
末尾带有“~”的文件就是备份的文件。自动生成。
备份末尾添加的字符串不限于“~”,还可以指定。使用 --suffix 选项。
$ cp -b --suffix=_$(date +%Y%m%d) 复制原文件 复制后文件
如果这样做,您可以附加今天的日期,例如“_20231123”。作为备份,这个更容易理解。
[wanglian@localhost shell]$ cp -b --suffix=_$(date +%Y%m%d) fileA.txt fileB.txt
[wanglian@localhost shell]$
[wanglian@localhost shell]$ ls
dir dir2 fileA.txt fileA_copy.txt fileB.txt fileB.txt_20231123 fileB.txt~
[wanglian@localhost shell]$
您还可以使用编号之类的方法添加数字。查看帮助了解详细信息。
-s 选项(–symbolic-link):创建符号链接
通常,创建符号链接时使用ln命令。
$ ln -s 原文件 符号链接
事实上,您也可以使用 cp 命令来完成此操作。方法是使用-s命令。
$ cp -s 原文件 符号链接
你实际上可以创建一个。
[wanglian@localhost shell]$ ls
dir dir2 fileA.txt fileB.txt
[wanglian@localhost shell]$
[wanglian@localhost shell]$ cp -s fileA.txt fileA_symbolic.txt
[wanglian@localhost shell]$ ls -l
合計 8
drwxr-xr-x. 2 wanglian wanglian 62 11月 23 13:36 dir
drwxr-xr-x. 2 wanglian wanglian 62 11月 23 13:52 dir2
-rw-r--r--. 1 wanglian wanglian 17 11月 23 13:21 fileA.txt
lrwxrwxrwx. 1 wanglian wanglian 9 11月 23 14:57 fileA_symbolic.txt -> fileA.txt
-rw-r--r--. 1 wanglian wanglian 17 11月 23 14:49 fileB.txt
[wanglian@localhost shell]$
-l 选项:创建硬链接
同样,您可以使用“-l”选项来创建硬链接。如果使用“ls -il”命令检查,可以确认 i 节点(i-node)
是相同的。
[wanglian@localhost shell]$ cp -l fileA.txt fileA_hard.txt
[wanglian@localhost shell]$ ls -il
合計 12
33577067 drwxr-xr-x. 2 wanglian wanglian 62 11月 23 13:36 dir
50336705 drwxr-xr-x. 2 wanglian wanglian 62 11月 23 13:52 dir2
16778240 -rw-r--r--. 2 wanglian wanglian 17 11月 23 13:21 fileA.txt
16778240 -rw-r--r--. 2 wanglian wanglian 17 11月 23 13:21 fileA_hard.txt
16777375 lrwxrwxrwx. 1 wanglian wanglian 9 11月 23 14:57 fileA_symbolic.txt -> fileA.txt
16778241 -rw-r--r--. 1 wanglian wanglian 17 11月 23 14:49 fileB.txt
[wanglian@localhost shell]$
-v选项:显示复制信息
使用 -v 选项显示有关已复制内容的信息。这在使用通配符等时很有用。
[wanglian@localhost shell]$ cp -v file* dir
'fileA.txt' -> 'dir/fileA.txt'
'fileA_hard.txt' -> 'dir/fileA_hard.txt'
'fileA_symbolic.txt' -> 'dir/fileA_symbolic.txt'
'fileB.txt' -> 'dir/fileB.txt'
[wanglian@localhost shell]$
-P 选项(–parents):复制整个目录结构
无法使用普通 cp 命令复制子目录。在这种情况下,请使用“-P”选项。
如果您在没有任何选项的情况下运行下面的示例,fileC.txt 通常会放置在 dir 目录中。您可以看到,通过使用 --parents 选项,我们可以按原样复制目录结构。
[wanglian@localhost shell]$ cp --parents ./etc/fileC.txt dir
[wanglian@localhost shell]$
[wanglian@localhost shell]$ ls dir/
etc fileA.txt fileA_copy.txt fileA_hard.txt fileA_symbolic.txt fileB.txt
[wanglian@localhost shell]$