我可以scp包含子文件夹的文件夹吗?


31

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

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

如果我在笔记本电脑上进行了某些更新,则希望使用一个命令将文件发送到ubuntu服务器。如果不想,我也不想在上面设置FTP,想知道scp是否可以处理吗?


我更喜欢tar通过sshunix.stackexchange.com/a/10028/79839
小鸡

Answers:


56

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

但是,即使文件在源和目标上都相同,scp其行为也一样cp并且始终会复制文件。[有关解决方法,请参见此处。]

由于这是一个静态网站,因此您很可能只会进行更新,而不会重新创建整个内容,因此,如果您使用rsyncssh而不是ssh ,您可能会发现事情进展得更快scp。大概像

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

...开始。如果您是通过LAN进行此操作,那么我个人将使用选项-avW代替rsync

Rsync还使您能够复制源中的删除内容。因此,如果您从树中删除文件,则可以rsync如上运行,并包含该标志--delete,它将从目标端删除相同的文件。


9

scp具有一个递归标志,它将执行您想要的操作。 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.

2

正如其他人指出的那样,scp -r和rsync -r是获得所需内容的最可靠方法。

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

(不过,最好在本地工作并使用rsync进行部署。这是需要注意的另一种工具。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.