对于任何系统管理员或一般Linux操作系统用户而言,在服务器之间执行文件复制操作都是一项常见任务。在将文件从一个系统复制到另一个系统时,由于某些特定原因,我们可能需要排除某些文件和目录被复制。即使在同一系统上将数据从一个位置传输到另一位置时,这也可能适用。
在本文中,我们将演示如何排除特定的文件或目录,或者使用用于此目的的三种最常用和广泛使用的实用程序(即rsync,cp和scp)进行复制。使用cp命令排除特定文件/目录的复制:
考虑以下情形,其中我的当前工作目录中有五个目录。
drwxr-xr-x2rootroot6Aug2922:47dir1
drwxr-xr-x2rootroot71Aug2922:47dir2
drwxr-xr-x2rootroot6Aug2922:47dir3
drwxr-xr-x2rootroot6Aug2922:47dir4
drwxr-xr-x2rootroot6Aug2922:47dir5
我想复制以名称dir开头的所有目录的内容,除了dir2目录,然后可以执行以下操作:
[[email protected]]#cp-r`ls-A|grepdir|grep-v"dir2"`/tmp/sahil/
这将复制除dir2以外的所有dir目录。如果我们需要复制所有目录并跳过单个目录,则可以运行以下命令。
[[email protected]]#cp-r!(dir2)/sahil
除目录dir2之外,当前工作目录中的所有目录和子目录都将复制到/ sahil中。同样,如果我们要从当前工作目录中复制除一个文件以外的所有文件,请键入以下内容
[[email protected]]#cp-r!(file3)/sahil
在上面的示例中,当前工作目录中的所有文件都被复制到/ sahil,除了名为file3的文件。
使用scp命令排除特定文件/目录被复制:
scp中的数据排除机制与先前使用cp命令演示的类似。以下是一个示例。上面的命令从当前工作目录中复制了所有文件,除了名为file4的文件。
[[email protected]]#scp-rp!(file4)192.168.19.142:/sahil
file1100%00.0KB/s00:00
file2100%00.0KB/s00:00
file3100%00.0KB/s00:00
file5100%00.0KB/s00:00
使用rsync命令排除特定文件/目录的复制:
在用于复制文件的命令集中,最灵活的是rsync命令。在本文中,我们将讨论范围限于排除某些文件/目录被复制的功能。要使用rysnc命令复制文件或文件夹,请使用–exclude标志,如以下示例所示。
[[email protected]]#rsync-av--progress--exclude="dir2"dir*/sahil
sendingincrementalfilelist
dir1/
dir3/
dir4/
dir5/
sent82bytesreceived28bytes220.00bytes/sec
totalsizeis0speedupis0.00
total0
drwxr-xr-x2rootroot6Aug2922:47dir1
drwxr-xr-x2rootroot6Aug2922:47dir3
drwxr-xr-x2rootroot6Aug2922:47dir4
drwxr-xr-x2rootroot6Aug2922:47dir5
我们也可以在远程复制文件时使用–exclude标志。以下是一个示例:
[[email protected]]#rsync-av--progress--exclude="dir2"dir*192.168.19.142:/sahil
sendingincrementalfilelist
dir1/
dir3/
dir4/
dir5/
sent82bytesreceived28bytes220.00bytes/sec
totalsizeis0speedupis0.00