Linux 系统使用 cp 命令复制文件和目录

不论是在Linux系统还是Windows系统,复制文件和目录都是最常用的操作之一。在Linux中,cp和rsync是最广泛使用的复制命令。通常使用cp命令复制文件,使用rsync复制目录。

要完成复制文件和目录的操作,必须至少拥有对源文件的读取权限和对目标目录的写入权限。

使用 cp 命令复制文件

几乎在所有Linux发行版和类Unix操作系统上,cp 命令都可以用于复制文件和目录。该命令的基本格式如下:

cp [additional_option] source_file target_file

经常和 cp 命令搭配使用的参数:

  • –v 详细(verbose): 显示复制多个文件时的进度
  • –p 保存(preserve): 保留原文件的创建时间和权限等属性
  • –f 强制(force): 删除现有文件创建新文件
  • –i 交互(interactive): 信息提示及确认
  • –R 递归(recursive): 复制目录中的所有文件和文件夹
  • –u 更新(update): 只有当源比目标更新时复制

例如,在当前工作目录下,我们将文件 my_file.txt 文件复制成名为 my_file2.txt的另一个文件。

cp my_file.txt my_file2.txt

下面的命令为 file.txt 文件创建一个名为 file_backup.txt 的副本。后面有一个 -i 参数,意味着如果目标文件已存在,它将在覆盖文件之前提示确认。

cp -i file.txt file_backup.txt

默认情况下,使用 cp 命令复制文件时,执行命令的用户将拥有新文件。使用 -p 参数将保留文件模式、所有权和时间戳等信息:

cp -p file.txt file_backup.txt

当在复制文件时使用 -v 参数,将输出复制信息。

cp -v file.txt file_backup.txt
'file.txt' -> 'file_backup.txt'

复制文件到目录

要将文件复制到目录,需要指定目录的绝对路径或相对路径。省略目标目录时,文件将被复制到当前目录。

在以下示例中,我们将文件 file.txt 复制到 /backup 目录中:

cp file.txt /backup

如上所示的命令,如果仅指定目标目录,那么新创建的文件将保留原名称。如果指定复制文件为其他名称,则需要指定文件名称,如下所示:

cp file.txt /backup/new_file.txt

复制多个文件

有的时候,我们需要一次复制多个文件到同一个目录。执行如下的命令:

cp file1.txt file2.txt file3.txt /backup

本示例中,我们在新目录 / backup 中创建了 file1.txt file2.txt file3.txt 三个文件的副本。

要复制 /pictures 文件夹中所有的 jpg 文件到 /backup 目录中,我们可以使用通配符的方式,执行如下的命令:

cp /pictures/*.jpg /backup

这会将 /pictures 目录中所有 .jpg 扩展名的文件,全部复制到 /backup 文件夹中。

使用cp 命令复制目录

要在Linux上使用 cp 命令复制目录,且目录中包含文件和文件夹,我们需要使用“ -R” 参数,以进行递归复制。在复制目录时,需要指定要复制的源目录和将要创建的新的目标目录。

$ cp -R <source_folder> <destination_folder>

例如,假设要将“ / etc”目录复制成另一个名为“ / etc_backup”的目录,执行如下命令:

$ cp -R /etc /etc_backup

如果 /etc_backup 文件夹已经存在,那么上面的命令会将 /etc 文件夹自身及其中的文件和子文件夹全部复制到 /etc_backup 文件夹中。

如果目标文件夹已经存在,而我们只想将文件夹内的内容复制到目标文件夹,我们可以使用 -T 参数,执行如下的命令:

$ cp -RT /etc /etc_backup

执行结果是,只将 /etc 文件夹内的全部内容复制到 /etc_backup 文件夹中。

使用rsync命令复制文件和目录

rsync是一个快速且通用的命令,可在两个位置之间同步文件和目录。它可用于将文件复制到本地或者远程位置。

rsync 可以使用很多的参数,最有用的参数是 -a ,是 ALL 的意思,可传输特殊设备和块设备并可保留符号链接、修改时间、组、所有权和权限等属性。

要将 my_file.txt 文件从当前工作目录,复制到 /new_directory/my_file_backup.txt 文件,请运行以下命令:

rsync –a my_file.txt /new_directory/my_file_backup.txt

要将 /etc/docker/ 文件夹复制到 /home/backup/docker/ 文件夹,执行如下命令:

rsync –a /etc/docker/ /home/backup/docker/

使用 rsync 命令复制目录的时候,如果源目录末尾加了斜杠(“/”),会将文件夹的内容复制到目标文件夹中。如果源目录末尾没有加斜杠(“/”),则会将源目录复制到目标文件夹中。所以,建议在源目录和目标目录的末尾,都加上斜杠(“/”)。

rsync -a /var/www/public_html/ /var/www/public_html_backup/

也可以使用 rsync 命令将本地目录复制到远程位置,语法如下:

$ rsync -ar <source_folder> <destination_user>@<destination_host>:<path>

例如,假设我们要将“ / etc”文件夹,复制到ip地址为192.168.178.35/24的备份服务器上。

我们可以使用如下所示的命令:

$ rsync -ar /etc devconnected@192.168.178.35:/etc_backup

devconnected 为远程主机上的用户名,192.168.178.35 为远程主机的IP地址,/etc_backup 为远程主机上的目标目录。

原创文章,作者:牛奇网,如若转载,请注明出处:https://www.niuqi360.com/lamp-config/copy-files-and-directories-in-linux/

发表评论

登录后才能评论