我可以scp文件夹有子文件夹吗?

我有一个文件夹包含静态网站的文件,如:

/site/index.html /site/css/css.css /site/js/js.js /site/images/... 

如果我在我的笔记本电脑上更新了某些东西,我想要一个命令将这些文件发送到我的Ubuntu服务器。 我不想在它上面设置FTP,如果我没有,想知道scp是否能够处理这个问题?

命令scp -r source user@target:dest将遍历源的所有子目录并复制它们。

但是, scp行为类似于cp并始终复制文件,即使源和目标都相同。 [请参阅此处了解解决方法。]

由于这是一个静态的网站,你很可能只做更新,而不是重新创build整个事情,所以如果你使用rsync代替scp ,你可能会发现事情会更快。 可能是类似的东西

 rsync -av -e ssh source user@target:dest 

…开始。 如果你是通过局域网来做这件事的话,我会亲自使用选项-avW代替rsync

Rsync也使您能够复制源代码中的删除操作。 所以如果你从树中删除一个文件,你可以像上面那样运行rsync ,并且包含标志--delete ,它将从目标端删除同一个文件。

scp有一个recursion的标志,将做你想要的。 scp -r /base/directory user@server:/to/location

man scp

 -r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal. 

正如其他人所指出的,scp -r和rsync -r是获得你想要的最可靠的方法。

您也可以使用sshfs来“挂载”它,就好像它是一个本地驱动器一样: sshfs user@host:/site /mnt/mountpoint

(不过,你可能最好在本地工作,使用rsync进行部署,只是另一个需要注意的工具。)