不论是在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/linux/copy-files-and-directories-in-linux/