如何在 Linux 中正确使用 cp 命令
-v,该选项为每个处理的文件提供诊断。
让我们使用以下命令下载 file-1.txt 文件:
$cp -v 文件1.txt 文件3.txt
在上面的输出中,箭头表示正在复制的文件。左边的参数是源文件,右边的参数是目标文件。
3. 如何将多个文件复制到数据库
到目前为止,我们只使用了单个文件和当前项目目录。但在实际的生产环境中,我们必须处理大量的文件。在这种情况下,一种常见的用例是将多个文件复制到单个文件夹。
显然我们可以多次运行 cp 命令来实现它,但这不是最好的方法。为了有效地执行此类操作,我们可以使用 cp 命令的不同语法。
因此,首先创建一个名为 dir-1 的新目录:
$mkdir dir-1
现在,让我们使用一个命令将所有三个文件复制到 dir-1 文件夹:
$cp -v 文件-1.txt 文件-2.txt 文件-3.txt dir-1
上面的输出显示所有文件都已复制到 dir-1 目录中。另外,需要注意的是,要使用此附加语法,该库必须已经存在并且必须是命令的最后一个参数。
4. 如何避免覆盖文件
默认情况下,cp 命令会更新目标文件,这意味着如果目标中存在同名文件,它将覆盖该文件。但是,我们可以-n使用该选项覆盖此默认行为。
为了理解这一点,让我们尝试覆盖现有文件:
$cp -n -v 文件1.txt 文件2.txt
在本例中,我们使用-v选项来指示 file-2.txt 文件不被覆盖。
5. 如何覆盖文件
在前面的示例中,我们了解了如何避免覆盖目标文件。但有时我们希望以更安全的方式编写文件延续。
在这种情况下,我们可以使用命令-i选项使复制过程交互。此选项在覆盖文件之前显示警告消息并等待用户确认。
为了说明这一点,让我们尝试覆盖现有文件:
$ cp -i 文件1.txt 文件2.txt
cp:覆盖“file-2.txt”?
正如我们所看到的,订单正在等待确认。与其他 Linux 命令一样,我们可以使用y继续或n中止。
cp 命令的这种默认非合作行为是相对不安全的。用户可能会错误地覆盖基本设置。因此,某些 Linux 发行版默认使用 alias 命令强制执行通信行为:
$alias cp='cp-i'
6. 仅当源是最新时才覆盖文件
在前面的示例中,我们了解了如何使用交互模式。然而,有时用户可能会无意中覆盖新文件。
为了避免此类错误情况,我们可以使用-uselect,它仅在源比目标新或文件不在目标中时才尝试复制操作。
首先,编辑源文件的时间戳:
$ touch -t 10101010 文件-1.txt
$ ls - l 文件 - 1 .txt
在上面的示例中,我们使用-ttouch 命令中的选项将文件的时间戳设置为 2010 年 10 月 10 日。
接下来,让我们将目标文件的时间戳更新为当前时间:
$ touch 文件 - 2 . txt
现在,让我们尝试使用选择创建一个复制函数-u:
$ cp -u -v 文件1.txt 文件2.txt
在这里,我们可以看到尚未尝试复制操作,因为目标文件比源文件新。
最后,让我们交换源参数和目标参数并运行副本:
$ cp -u -v 文件2.txt 文件1.txt
从上面的结果中,我们可以观察到复制操作成功,因为源文件比目标文件新。
7. 如何在覆盖之前创建备份文件
我们可以指示 cp 命令在覆盖目标文件之前对其进行备份。为此,我们可以使用--backup创建自动备份的选项。
$ cp --backup=编号 -v 文件-1.txt 文件-2.txt
在此示例中,我们使用了备份编号系统。此过程在存储的文件名中使用递增的数字。
为了理解这一点,让我们多次运行一个命令并查看输出:
$ cp --backup=编号 -v 文件-1.txt 文件-2.txt
$ cp --backup=编号 -v 文件-1.txt 文件-2.txt
$ cp --backup=编号 -v 文件-1.txt 文件-2.txt
8. 如何单击复制覆盖文件
在前面的几个示例中,我们了解了如何以更安全的方式覆盖文件。但是,在极少数情况下,需要覆盖该文件。然而,并不能保证该过程总是成功。
例如,如果目标文件没有权限,复制操作将会失败。让我们用一个例子来说明这一点。
首先,更改目标文件的权限:
$ chmod 444
$ ls -l 文件 - 2 .txt
现在,让我们尝试覆盖 file-2.txt 文件:
$cp 文件-1.txt 文件-2.txt
从上面的输出中,我们可以看到该命令因拒绝访问错误而失败。
为了克服这个限制,我们可以使用-fselect,如果目标文件无法打开,它会删除目标文件并尝试复制操作。
现在,让我们使用-f选项来硬覆盖文件:
$ cp -f -v 文件1.txt 文件2.txt
9. 如何在复制前删除目标文件
在前面的示例中,我们了解了如果执行期间发生错误如何删除目标文件。然而,有时需要先提取目标文件,然后再执行复制操作。
为了满足这样的要求,我们可以使用--remove-destination年份选项。
$cp --remove-destination -v 文件-1.txt 文件-2.txt
从上面的输出中我们可以看到cp命令首先提取目标文件,然后执行复制操作。
10. 如何创建硬链接文件而不是复制
我们可以创建硬链接而不是更新源文件。当磁盘空间有限时,此选项起着重要作用。
因此,让我们使用-l选择来建立牢固的联系:
$cp -l -v 文件1.txt 文件4.txt
现在,让我们看一下两个文件的索引节点号,以验证紧密连接:
$ls -i1 文件1.txt 文件4.txt
在上面的输出中,第一列中的数字表示索引节点号。
11. 如何创建软链接文件而不是复制
同样,我们可以使用选项创建软链接而不是创建新代码,-s如下所示:
$cp -s -v 文件-1.txt 文件-5.txt
现在,让我们看看符号连接是否正确完成:
$ls -l 文件-5.txt
在上面的结果中,最后一列表示模型链接关系。
12. 如何在复制过程中保护文件属性
与文件关联的属性有多种,例如访问时间、修改时间、权限等。默认情况下,复制文件时不会保留这些属性。要覆盖此默认行为,我们可以使用-p选项。
要理解这一点,首先编辑 file-1.txt 的时间戳:
$ touch -t 10101010 文件-1.txt
现在,让我们通过保留其所有属性来复制该文件:
$ cp -p -v 文件1.txt 文件6.txt
最后,检查 file-6.txt 文件的时间戳:
$ls -l 文件-6.txt
13. 如何递归复制函数
到目前为止我们已经了解了如何复制单个文件。然而,我们通常必须复制特定目录中的所有文件和子目录。
-r在这种情况下,我们可以通过使用or选项来使用递归模式-R。
因此,让我们创建一个目录并在下面添加一些文件和子目录:
$ mkdir -p dir-1/dir-2
$ touch dir-1/file-1.txt dir-1/dir-2/file-2.txt
接下来,检查数据库设计是否正确:
$tree dir-1
现在,让我们使用以下命令递归复制目录 dir-1:
$cp -r -v dir-1 dir-3
最后,检查所有文件和子目录是否备份成功:
$tree dir-3
14. 如何在多个站点上下载
与文件一样,我们可以使用单个命令递归地复制多个目录。然而,为了做到这一点,目标寄存器必须已经存在并且是命令中的最后一个参数。让我们通过一个例子来理解这一点。
首先,创建一个新网站:
$mkdir dir-4
现在,让我们使用以下命令将 dir-1 和 dir-3 目录复制到 dir-4 目录:
$cp -r -v dir-1 dir-3 dir-4
同样的,我们可以使用命令-t选项来得到同样的结果。该选项允许我们指定目标目录。所以我们也可以将它用作第一个参数:
$cp -t dir-4 -r -v dir-1 dir-3
在本文中,我们讨论如何使用 cp 命令复制文件和文件夹。初学者在日常生活中使用 Linux 系统时可以看到这些例子。
你也许也喜欢:
的
进度 – 显示(cp、mv、dd、tar)命令的复制数据百分比
使用“pv”命令监控(复制/查看/移动)数据进度
在使用中
高级复制命令 - 在 Linux 中复制大文件/文件夹时显示高级代码
的
您还知道 Linux 中 cp 命令的其他最佳示例吗?请在下面的评论中告诉我们您的看法。
还没有评论,来说两句吧...