在远程服务器上复制文件和目录,同时排除其中一些文件和目录

时间:2010-06-18 16:40:19

标签: linux ssh

服务器1通过SSH连接到服务器2.

我们知道这个: 我可以执行诸如

之类的命令

“ssh server2”cp -rv / var / www / tmp“”

将整个/ var / www目录复制到/ tmp。但是在/ var / www中我们有以下结构(下面的样本LS输出)

$ ls

/ WEB1 / WEB2 / WEB3 file1.php file2.php file3.php

如何执行将排除/ web1,/ web3,file1.php和file3.php的cp命令(显然只是复制web2和file2不是一个选项,因为文件明显多于6个)

注意:我在从Server1进行RSYNCing之前使用它来备份Server2。

4 个答案:

答案 0 :(得分:1)

为此,您应该使用rsync。

我倾向于使用rsync-exclude.txt文件来指定我不想要的内容,因为它更适合未来。

/public_ftp/.ftpquota
/tmp
/var/local/backups/rsyncs
/backup/rsync
/proc
/dev

所以命令可以是

rsync --exclude-from rsync-exclude.txt --stats -avz -e ssh \
      --numeric-ids /syncfrom/dir  user@example.com:/backup/sync-to-dir

编辑::

对于本地服务器,您仍然可以使用rsync,但是您也可以使用tar并排除您不想要的内容。

 (cd dir1;tar --exclude 'web2/*' -cf -) | (cd dir2; tar -xvf -)

或      找到dir1 dir2> exclude-files(cd dir1; tar --exclude-from exclude-files -cf - )| (cd dir2; tar -xvf - )

答案 1 :(得分:1)

前两张海报都对rsync提出了很好的建议。这是一个更完整的流程大纲。

(1)您希望在从服务器1同步之前备份服务器2,所以让我们使用rsync执行此操作。这是从服务器1看到的命令(假设它可以访问服务器2):

ssh user@server2 "rsync $RSYNC_OPTS /var/www/ /path/to/backup"

(2)备份服务器2后,让我们现在从服务器1同步(再次,从服务器1看)

rsync $RSYNC_OPTS /path/to/www/ user@server2:/var/www/

只要您使用理智RSYNC_OPTS,备份和同步都应该合理。理查德对这些选择提出了合理的建议:

RSYNC_OPTS="--exclude-from rsync-exclude.txt --stats -avz --numeric-ids -e ssh"

如果您想要准确的复制品,我建议您--delete--delete-after。请务必查找您不熟悉的任何选项的详细信息。

答案 2 :(得分:0)

在将新版本部署到我的网络服务器时,我做了同样的事情。你有可能在ssh上使用rsync吗? rsync允许您指定--exclude选项并在命令行或通过文件指定dirs / files。这是我过去使用过的非常好的文章: http://articles.slicehost.com/2007/10/10/rsync-exclude-files-and-folders

答案 3 :(得分:0)

因为你要做的是“复制除那些之外的所有文件”,按照你的例子你可以这样做:

 ssh server2 "cp -rv /var/www/!(web1|web3|file1.php|file3.php) /tmp"

但请记住,备份服务器非常难看:p