如何在 Linux 和 Unix 中复制文件?10 个cp 命令示例 您所在的位置:网站首页 unix怎么输入命令 如何在 Linux 和 Unix 中复制文件?10 个cp 命令示例

如何在 Linux 和 Unix 中复制文件?10 个cp 命令示例

#如何在 Linux 和 Unix 中复制文件?10 个cp 命令示例| 来源: 网络整理| 查看: 265

cp 是 Linux 中的基本命令之一。您已经知道它用于将一个或多个文件或目录从源复制到目标。

虽然本教程适用于初学者,但也有助于大家使用一些实际示例快速查看各种 cp 命令选项。

即使您一直在使用 cp 命令,下面解释的一个或多个示例可能对您来说可能是新的。复制命令的一般形式:

cp [option] source destination 1. 将文件或目录从源复制到目标

要复制文件,您需要将源和目标传递给复制命令。以下示例将文件从 project/readme.txt 复制到 projectbackup/readme-new.txt

$ cp project/readme.txt projectbackup/readme-new.txt $ cd projectbackup/ $ ls readme-new.txt

如果要将文件从一个文件夹复制到另一个具有相同名称的文件夹,只需目标目录名称就足够了,如下所示。

$ cp project/readme.txt projectbackup/ $ cd projectbackup/ $ ls readme.txt

可以使用递归选项 -r 将目录(及其所有内容)从源复制到目标,如下所示:

$ ls project src/ bin/ doc/ lib/ test/ readme.txt LICENSE $ cp -r project/ backup/ $ ls backup src/ bin/ doc/ lib/ test/ readme.txt LICENSE 2.复制多个文件或目录

您可以将多个文件从源复制到目标,如下所示:

$ cd src/ $ cp global.c main.c parse.c /home/tiamo/projectbackup/src/

如果源文件具有通用模式,请使用通配符,如下所示。在此示例中,所有 c 扩展文件都被复制到 /home/tiamo/projectbackup/src/ 目录。

$ cp *.c /home/tiamo/projectbackup/src/

复制多个目录,如下所示。

$ cd project/ $ cp -r src/ bin/ /home/tiamo/projectbackup/ 3.复制到目的地之前的备份

如果目标文件已经存在同名,则 cp 允许您在覆盖目标文件之前对其进行备份。

在本例中,readme.txt 存在于 project/ 和 projectbackup/ 目录中,在将其从 project/ 复制到 projectbackup/ 时,会备份现有的 readme.txt,如下所示:

$ cd projectbackup $ ls -l readme.txt -rw-r--r-- 1 bala tt 1038 Jan 8 13:15 readme.txt $ cd ../project $ ls -l readme.txt -rw-r--r-- 1 bala tt 1020 Jan 8 12:25 readme.txt $ cp --backup readme.txt /home/tiamo/projectbackup/

现有文件已移至 readme.txt~ 并将新文件复制为 readme.txt,如下所示。

$ cd /home/tiamo/projectbackup/ $ ls -l -rw-r--r-- 1 bala tt 1020 Jan 8 13:36 readme.txt -rw-r--r-- 1 bala tt 1038 Jan 8 13:15 readme.txt~

谈到备份,您必须了解rsync 命令如何有效地备份文件。

4.复制时保留链接

执行 cp 命令时,如果源是链接文件,则复制实际文件而不是链接文件。如果您只想按原样复制链接,请指定选项 -d,如下所示:

下面显示如果没有选项 -d,它将复制文件(而不是链接):

$ cd project/bin $ ls -l startup.sh lrwxrwxrwx 1 root root 18 Jan 8 13:59 startup.sh -> ../test/startup.sh $ cp startup.sh /home/tiamo/projectbackup/bin/ $ cd /home/tiamo/projectbackup/bin/ $ ls -l -rw-r--r-- 1 root root 102 Jan 8 14:02 startup.sh

要在复制时保留链接,请执行以下操作:

$ cd project/bin $ cp -d startup.sh /home/tiamo/projectbackup/bin/ $ ls -l startup.sh lrwxrwxrwx 1 root root 18 Jan 8 14:10 startup.sh -> ../test/startup.sh 5.不要覆盖现有文件

如果您只想在目标文件不存在时复制,请使用选项 -n,如下所示。这不会覆盖现有文件,并且 cp 命令将返回成功退出代码,如下所示:

$ cd projectbackup $ ls -l readme.txt -rw-r--r-- 1 bala tt 1038 Jan 8 13:15 readme.txt $ cd ../project $ ls -l readme.txt -rw-r--r-- 1 bala tt 1020 Jan 8 12:25 readme.txt $ cp -n readme.txt /home/tiamo/projectbackup/bin/ $ echo $? 0

如下所示,目标文件没有被覆盖。

$ cd projectbackup $ ls -l readme.txt -rw-r--r-- 1 bala tt 1038 Jan 8 13:15 readme.txt 6. 覆盖前确认(交互模式)

当您使用 -i 选项时,它会在覆盖文件之前要求确认,如下所示。

$ cp -i readme.txt /home/tiamo/projectbackup/ cp: overwrite `/home/tiamo/projectbackup/readme.txt'? y 7.创建文件的硬链接(而不是复制)

执行 cp 命令时,可以创建文件的硬链接(而不是复制文件)。以下示例将 sample.txt 文件的硬链接创建到目录 test/ 中,

$ ls -li sample.txt 10883362 -rw-r--r-- 2 bala tt 1038 Jan 9 18:40 sample.txt $ cp -l sample.txt test/ $ ls -li test/sample.txt 10883362 -rw-r--r-- 2 bala tt 1038 Jan 9 18:40 test/sample.txt

如上所示,test/sample.txt 是与 sample.txt 文件的硬链接文件,两个文件的 inode 相同。

8.创建指向文件或目录的软链接(而不是复制)

执行 cp 命令时,可以创建指向文件或目录的软链接。在以下示例中,为 libFS.so.6.0.0 创建了一个符号链接作为 libFS.so,

# cd /usr/lib/ # ls -l libFS.so.6.0.0 -rw-r--r-- 1 root root 42808 Nov 19 2010 libFS.so.6.0.0 # cp -s libFS.so.6.0.0 libFS.so # ls -l libFS.so lrwxrwxrwx 1 root root 14 Jan 9 20:18 libFS.so -> libFS.so.6.0.0 9. 复制时保留文件或目录的属性

使用 -p 选项,您可以保留文件或目录的属性,如下所示:

$ ls -l sample.txt -rw-r--r-- 2 bala geek 1038 Jan 9 18:40 sample.txt $ cp -p sample.txt test/ $ ls -l test/sample.txt -rw-r--r-- 2 bala geek 1038 Jan 9 18:40 test/sample.txt

也可以只保留所需的属性,如模式、所有权、时间戳等,

以下示例在复制文件时保留文件的模式:

$ cp --preserve=mode sample.txt test/ 10.仅当源文件比目标文件更新或丢失时复制

复制小文件不需要太多时间,但复制大文件可能需要相当长的时间。因此,在复制大文件时,您可能希望确保仅在源文件比目标文件更新时执行此操作,或者使用选项 -u 丢失目标文件时执行此操作,如下所示。

在这个例子中,两个文件 LICENSE 和 readme.txt 将从 project/ 复制到 projectbackup/。但是, LICENSE 文件已经存在于 projectbackup/ 目录中,并且比 project/ 目录中的要新。

$ cd project/ $ ls -l LICENSE readme.txt -rw-r--r-- 1 bala geek 108 Jan 8 13:14 LICENSE -rw-r--r-- 1 bala geek 32 Jan 8 13:16 readme.txt $ cd /home/tiamo/projectbackup/ $ ls -l LICENSE readme.txt ls: cannot access readme.txt: No such file or directory -rw-r--r-- 1 root root 112 Jan 9 20:31 LICENSE

因此,在本例中,无需再次将 LICENSE 文件复制到 projectbackup/ 目录。如果您使用 -u 选项,则 cp 命令会自动处理这一点,如下所示。在下面的示例中,只有 readme.txt 文件被复制,如文件上的时间戳所示。

$ cp -u -v LICENSE readme.txt /home/tiamo/projectbackup/ `readme.txt' -> `/home/tiamo/projectbackup/readme.txt' $ cd /home/tiamo/projectbackup/ $ ls -l LICENSE readme.txt -rw-r--r-- 1 bala geek 112 Jan 9 20:31 LICENSE -rw-r--r-- 1 bala geek 32 Jan 9 22:17 readme.txt


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有