从Linux复制中如何排除特定目录

时间:2020-03-21 11:47:49  来源:igfitidea点击:

在此简要教程中,我们将了解如何在Linux中使用Rsync和cp命令从复制中排除特定目录。

从Linux复制中排除特定目录

可能有很多方法可以完成此任务。
我知道以下两种方法。

方法1-使用rsync命令

我们可能已经知道,Rsync是一种快速且通用的工具,它可以本地复制文件和文件夹,或者通过任何远程Shell与另一主机进行复制,或者与远程rsync守护进程进行复制。
Rsync有很多有用的选项。
有用的选项之一是--exclude。
使用排除选项,我们可以从复制中排除某些文件/目录。
让我们看一个例子。

假设我们有一个名为theitroad的文件夹。
在目录theitroad内,有三个子目录,即dir1,dir2和dir3.

$ls theitroad/
dir1 dir2 dir3

我们想要将dir1和dir3复制到不同的位置,而不是dir2.
如何?
这是rsync帮助的地方。

要使用rsync命令从复制中排除特定目录,只需运行:

$rsync -av --progress theitroad/backup/--exclude dir2

输出示例为:

sending incremental file list
./
dir1/
dir1/file1.pdf
 6,152,611 100% 58.36MB/s 0:00:00 (xfr#1, to-chk=7/11)
dir1/file2
 2,597,261 100% 14.83MB/s 0:00:00 (xfr#2, to-chk=6/11)
dir1/file3.doc
 88,143 100% 470.37kB/s 0:00:00 (xfr#3, to-chk=5/11)
dir1/file4.txt
 66,374 100% 330.71kB/s 0:00:00 (xfr#4, to-chk=4/11)
dir3/
dir3/file1.pdf
 6,152,611 100% 18.39MB/s 0:00:00 (xfr#5, to-chk=3/11)
dir3/file2
 2,597,261 100% 6.68MB/s 0:00:00 (xfr#6, to-chk=2/11)
dir3/file3.doc
 88,143 100% 224.16kB/s 0:00:00 (xfr#7, to-chk=1/11)
dir3/file4.txt
 66,374 100% 164.10kB/s 0:00:00 (xfr#8, to-chk=0/11)
sent 17,813,759 bytes received 187 bytes 11,875,964.00 bytes/sec
total size is 17,808,778 speedup is 1.00

上面的命令会将theitroad文件夹中的所有内容复制到一个名为backup的文件夹中,并将目录dir2从复制中排除。

另外,我们可以使用以下相同的命令。

$rsync -av --progress --exclude="folder_to_exclude" source_dirctory dest_directory

例子:

$rsync -av --progress --exclude="dir2" theitroad/backup/

为了节省时间,在使用rsync备份系统时,从复制中忽略或者删除一些重要程度不高的目录实际上是一个好主意。

有关更多详细信息,请查看手册页。

$man rsync

方法2-使用cp命令

我们还可以使用cp命令将文件夹从一个位置复制到另一位置(不包括特定目录)。

例如,在源目录中:theitroad。

$cd theitroad/

并且,运行以下命令:

$cp -r `ls -A | grep -v "dir2"` /home/sk/backup/

上面的命令将复制当前文件夹theitroad的所有内容(子目录dir2除外)并将其保存到/home/sk/backup /目录。

更简单的是,我们可以按照以下步骤进行操作。

$cp -r !(dir2) /home/sk/backup/